如果存在尾部斜杠,则不会发生重定向

时间:2013-12-02 10:08:16

标签: regex .htaccess mod-rewrite https apache2

我的.htaccess文件中名为博客的目录中有以下几行。

RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

当我执行以下操作时会发生不同的事情:

https://staging.example.com/blog/ - redirect does not work
https://staging.example.com/blog - redirect does work

当存在尾部斜杠时,我的重定向不起作用,为什么会这样?

更新

这是博客/ .htaccess文件。

<IfModule mod_rewrite.c>
RewriteEngine On

# Froce HTTP
RewriteCond %{HTTPS} on
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

2 个答案:

答案 0 :(得分:2)

  

https://staging.example.com/blog/ - redirect does not work

这可能是因为blog/.htaccess的存在。如果确实如此,那么在其他规则之上添加此行:

RewriteEngine On

RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

答案 1 :(得分:1)

如果您的目录名称等于重定向“路径”,则其优先级高于您的规则。

在您的情况下,如果您在DocumentRoot下有“博客”目录,则重定向只会失败。

我们需要更多关于您的结构和其他规则的信息。

但是因为现有的目录阻止了我的重写规则,我一直没有睡觉一晚。