2012-04-12 97 views
0

我使用mod_rewrite来标识传递到形式我的web应用程序的工作:mod_rewrite的不目录名

http://clipi.ca/1W 

我用一个简单的正则表达式识别这些:

RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z]+)$ 
RewriteRule ^(.*)$ /index.php?urlid=%1 [L,QSA] 

...在大多数情况下工作正常。但是我注意到,当标识符是目录的名称时,重写失败,并且Apache正在返回一个目录索引!

如何阻止此行为并使重写规则适用于目录? (请注意,只要引用了目录中的实际文件,重写条件就会失败,这不成问题。)

回答

0

我想我可能自己弄明白了:很明显,Apache会追加一个尾部的斜杠到请求映射到文件系统上的目录之前它应用任何重写规则。这是一种愚蠢的,海事组织,但通过添加一个可选的尾部斜杠我的条件正则表达式:

RewriteCond %{REQUEST_URI} ^/([0-9a-zA-Z]+)/?$ 

...这似乎是工作!

不过,理想的解决方案是让Apache到而不是追加尾部斜杠开始。如果有人知道如何做到这一点,请在此发布,我会给你答案。