mod_rewrite在大写目录上失败

时间:2012-11-27 04:15:00

标签: .htaccess mod-rewrite

我在.htaccess文件中有一个非常基本的mod_rewrite,我确定上次看到它时确实工作了,但现在它在REQUEST_URI的情况下做了一些奇怪的事情。它的目的是将子域重写为给定文件,将子域作为bnurl的php var传递。这是我的代码:

RewriteCond %{REQUEST_URI}= "RSDEV/location/" [NC]  
RewriteCond %{HTTP_HOST} .  
RewriteCond %{HTTP_HOST} !^www\. [NC]  
RewriteCond %{HTTP_HOST} ^([^.]+)\.mydomain\.co\.uk(:80)? [NC]  
RewriteRule ^RSDEV/location/$ RSDEV/newmain.php?bnurl=%1&accesstype=new [NC,L]  

现在,在我的网络浏览器中键入joebloggs.mydomain.co.uk/RSDEV/location/会返回响应“此服务器上找不到请求的URL / RSDEV /位置/”这是正确的声明,因为/ RSDEV / location /不是真正的目录,但是为什么它没有重写为RSDEV / newmain.php?bnurl = joebloggs& accesstype = new正如预期的那样?

现在,真正奇怪的是,如果我将joebloggs.mydomain.co.uk/rsdev/location/输入我的浏览器(注意rsdev现在是小写),它会按预期正确重写。脚本newmain.php在dir RSDEV(大写)中,所以如果它失败了,我原以为它会以小写的rsdev反过来失败。

如您所见,我在每一行都有[NC]。这是我的mod_rewrite代码失败还是其他一些神秘的服务器强迫我整晚都在忙?

1 个答案:

答案 0 :(得分:1)

摆脱界限:

RewriteCond %{REQUEST_URI}= "RSDEV/location/" [NC]  

已经在重写规则的模式中进行了检查。不仅如此,=已连接到%{REQUEST_URI}变量,因此字符串最后以=结尾(它应该位于模式的旁边)。