2009-02-15 80 views
2

我在.htaccess文件中的以下重写规则:另一个mod_rewrite的斜线问题

RewriteEngine on 
RewriteRule ^news/([0-9]+)/?$ /?action=news&start=$1 [L] 
RewriteRule ^man/([a-zA-Z0-9_]+)/?$ /?action=man&page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_]+)/?$ /?action=$1 [L] 

所有然后用/?结束检查可选尾随斜线。这是有效的 - 这意味着我可以使用http://www.site.com/news/http://www.site.com/news转到news页面,这正是我想要的。问题是,虽然http://www.site.com/news/工作正常,并默默重定向和所有有趣的东西,http://www.site.com/news由于某种原因明显重定向到http://www.site.com/news/?action=news。他们都提出了相同的网站,但由于某种原因,如果我离开了尾部的斜线,网址会发生变化,看起来都很糟糕。

任何想法这是怎么回事?我的.hyaccess文件中没有其他规则。我还要指出,http://www.site.com/news/0http://www.site.com/news/0/不会遇到同样的问题。他们两人都无形中重定向到http://www.site.com/?action=news&start=0,这正是我想要的。这似乎只是第三条规则的问题。

如果它有帮助,该网站是在SourceForge.net。

回答

9

一个疯狂的猜测:有一个名为“news”的目录,并且自动Apache目录“添加一个尾部斜线”重定向正在踢入,并以奇怪的方式与您的RewriteRule进行交互。如果是这样的话,

DirectorySlash Off 

可能会有所帮助。

+0

太棒了!谢谢。我不知道为什么会发生这种情况,但是Apache是​​一个复杂的程序,我愿意把它写下来,现在就修好了。 – 2009-02-15 09:42:23

0

也许MultiViews导致此行为。尝试禁用此选项:

Options -MultiViews 

另一种猜测:删除前导斜杠的替换。