htaccess尾随斜线不起作用

时间:2013-09-17 20:33:28

标签: apache .htaccess mod-rewrite

我的htaccess中有以下代码。该网站工作正常(即:没有500错误),但它没有在我的网址中添加尾部斜杠:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?$1 [NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://staging.foo.com/$1/ [L,R=301]

</IfModule>

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

您需要交换规则的顺序

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://staging.foo.com/$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteRule ^(.*)$ /index.php?$1 [NC,L]

</IfModule>

它无效的原因是因为路由到/index.php规则正在应用第一个,然后重写引擎循环,然后是第二个规则(重定向规则)将不会被应用,因为URI已被重写为/index.php并导致%{REQUEST_FILENAME} !-f失败,因为index.php存在,因此,重定向永远不会发生。