2010-08-13 43 views
0

我在这里有一个小问题。 我用一个简单的规则来重定向到一个脚本的所有请求,节选一些文件夹与静态内容:mod_rewrite创建301而不是透明重定向如果文件夹存在

RewriteEngine On 
RewriteCond $1 !^(templates|css|js|uploads)/(.*)$ 
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

大多数时候,重定向是良好的,透明的。 但是,如果与URL匹配的文件夹存在,并且如果我没有放上最后的“/”,我将会有301重定向。

例子:(文件夹库不存在,但不MODS)

  • HT * P://本地主机/测试/画廊/ - >行
  • HT * P://本地主机/测试/ MODS/- >确定
  • HT 号码://本地主机/测试/ MODS - > 301重定向到HT号码://本地主机/测试/ MODS/URL = MODS

我有吗?这个问题在所有的apache2服务器上(经过测试的Fedora,Debian,Windo WS)。

有人知道如何解决这个问题吗? 谢谢

回答

1

这是由于DirectorySlash指令,它将执行重写后执行外部重定向,这意味着将您的添加查询字符串与它意想不到的结果。

您可以关闭DirectorySlash,但由于文档中描述的原因,不推荐这样做。在这种情况下,首选选项可能只是执行mod_dir的工作,在执行规则之前重定向到适当的以斜杠终止的URL。在你现有的规则之上的东西应该可以工作:

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule ^.*$ /$0/ [R=301,L] 
+0

就是这样,谢谢! – 2010-08-13 19:40:52

相关问题