2011-05-09 168 views
4

我正在使用mod_rewrite重写/产品/products.php。我得到这个代码/.htaccess谁在我的网址末尾添加了斜杠?

Options FollowSymLinks 
RewriteEngine on 

RewriteRule ^([a-zA-z]+)$ /$1.php [PT,L] 

不幸的是也有一个文件夹,我的服务器上/产品/

我的问题是,当我尝试访问http://mydomain.com/products我的请求重定向到http://mydomain.com/products/和显示我的错误,因为我不没有该目录的索引。

谁在重新定向我? Apache,我的UserAgent? 如何防止发生这种情况而不更改文件夹名称或重写规则?

+1

使用mod_rewrite如何?请向我们展示'mod_rewrite'规则 - 在某些情况下,现有文件和文件夹优先于mod_rewrite。 – Piskvor 2011-05-09 15:33:14

回答

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

+0

我在.htaccess文件中添加了“DirectorySlash Off”,但仍然是重定向。 – sauerburger 2011-05-09 15:45:23

+0

@esel尝试其他解决方案。也许它对你更容易。 – zaf 2011-05-09 15:58:11

+0

是的,这与我从Marms发布的想法完全一样。谢谢。 – sauerburger 2011-05-09 16:00:41

2

每一个浏览器是您的请求后,将最后的斜线,如果它不” t由“.something”因为它认为它是一个文件夹。为了避免这种情况,你重写规则应该是这样的:

重写规则/products(.*)$ /index.php?page=products

OR

重写规则/产品/index.php?page =产品

这样,它会重写每一个带有“/ products”的请求,有或没有斜线。

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

+0

谢谢。我可以将规则更改为RewriteRule ^([a-zA-z] +)\ /?$ /$1.php [PT,L],因此只有/ products和/ products /被重写,而不是其他请求。 – sauerburger 2011-05-09 15:55:57

1

您可能已在您的Apache上启用MultiViews

+0

为您的“Trailing斜杠问题”答案+1。 – zaf 2011-05-09 16:06:56

相关问题