冲突的htaccess重写规则

时间:2014-06-09 21:30:10

标签: regex .htaccess mod-rewrite

我在一个目录中使用了两个重写规则 - 一个用于从所有php文件中删除php扩展,另一个用于漂亮的URL,但它们似乎相互冲突。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^view/doc/([a-zA-Z0-9.]+) /documents/view.php?doc=$1 [L]
RewriteRule ^view/photo/([a-zA-Z0-9.]+) /documents/view.php?photo=$1 [L]

当我尝试链接到一个文件时,文件没有加载 - 当我检查GET数组的内容时,我可以看到文件名中添加了.php,所以在这种情况下正确地看不到它

Array ( [doc] => 31f224f801547fd743d5e935d7050a3a.pdf.php )

文件本身可以是任意32个字符,后跟一些扩展名(doc,xls,pdf,txt,rtf等),所以我假设正则表达式是正确的,所以第一次重写导致这个,如果是,我可以在同一目录中使用它们而没有任何问题吗?

1 个答案:

答案 0 :(得分:2)

目前,/view/doc/view/photo路由的抓取组包含1 + [a-zA-Z0-9.]个字符。这意味着包含.php扩展名(来自您的初始重定向)。

我相信你意识到了这一点,但我想重新进行迭代,因为解决方案很简单。您应该做的就是匹配捕获组外的.php

RewriteRule ^view/doc/([a-zA-Z0-9.]+)\.php /documents/view.php?doc=$1 [L]
RewriteRule ^view/photo/([a-zA-Z0-9.]+)\.php /documents/view.php?photo=$1 [L]

演示: old new