谁在我的网址末尾加了一个斜线?

时间:2011-05-09 15:31:05

标签: apache mod-rewrite redirect user-agent

我正在使用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? 如何在不更改文件夹名称或重写规则的情况下防止发生这种情况?

3 个答案:

答案 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]

Trailing slashes problem

答案 1 :(得分:1)

如果不是“.something”,则每个浏览器都会在您的请求后添加尾部斜杠,因为它认为它是一个文件夹。为避免这种情况,您的重写规则应如下所示:

RewriteRule /products(.*)$ /index.php?page=products

OR

RewriteRule / products /index.php?page=products

这样,它会使用“/ products”重写每个请求,包含或不包含尾部斜杠。

唯一的问题是http请求无法访问您的文件夹/ p​​roducts /。如果需要,您必须更改文件夹名称或页面名称。

答案 2 :(得分:1)

您可能已在Apache上启用了MultiViews