我正在使用mod_rewrite将 / products 重写为 /products.php 。我在 /。htaccess
中有这段代码Options FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-z]+)$ /$1.php [PT,L]
不幸的是,我的服务器上还有一个文件夹 / products / 。
我的问题是,当我尝试访问 http://mydomain.com/products 时,我的请求被重定向到 http://mydomain.com/products/ 并向我显示错误,因为我没有该目录的索引。
谁重定向我? Apache,我的UserAgent? 如何在不更改文件夹名称或重写规则的情况下防止发生这种情况?
答案 0 :(得分:5)
您需要查找“DirectorySlash指令”。
DirectorySlash指令 确定mod_dir是否应该 指向目录的修正URL或 不
http://httpd.apache.org/docs/2.2/mod/mod_dir.html
您还可以尝试为重写规则添加可选的斜杠:
RewriteRule ^([a-zA-z]+)/?$ /$1.php [PT,L]
答案 1 :(得分:1)
如果不是“.something”,则每个浏览器都会在您的请求后添加尾部斜杠,因为它认为它是一个文件夹。为避免这种情况,您的重写规则应如下所示:
RewriteRule /products(.*)$ /index.php?page=products
OR
RewriteRule / products /index.php?page=products
这样,它会使用“/ products”重写每个请求,包含或不包含尾部斜杠。
唯一的问题是http请求无法访问您的文件夹/ products /。如果需要,您必须更改文件夹名称或页面名称。
答案 2 :(得分:1)
您可能已在Apache上启用了MultiViews。