为什么我的mod重写规则不起作用?

时间:2013-02-28 19:52:23

标签: .htaccess mod-rewrite

我正试图美化一个网址,以便从丑陋的东西中走出来:

www.domain.com/lookup.php?firstname=jack&middlename=ron&lastname=paul

www.domain.com/n/jack/ron/paul

我在服务器上有其他一些重写工作,但这个似乎不喜欢我,因为我得到了404.这是我正在尝试的:

RewriteRule ^/n/(.*)/(.*)/(.*)$ lookup.php?firstname=$1&middlename=$2&lastname=$3

我错过了什么?为什么不起作用?

像这样更简单的工作正常:

RewriteRule ^article/(.*)$ articles.php?article_id=$1

要做一个更复杂的事情还需要做些什么?

2 个答案:

答案 0 :(得分:1)

这不起作用,因为你在htaccess文件中有规则。当通过htaccess文件中的重写规则处理URI时,始终会删除前导斜杠(或“前缀”)。这意味着:

# here-------v
RewriteRule ^/n/(.*)/(.*)/(.*)$ lookup.php?firstname=$1&middlename=$2&lastname=$3

模式中的前导斜杠会导致它永远不匹配,因为htaccess文件中的所有URI都将其剥离。在htaccess文件中重写规则基本上类似于<Directory>容器中的规则。试着摆脱那种斜线。

答案 1 :(得分:0)

我必须看到更多你的httpd配置,但这里有一些注释:

  1. 您的规则末尾似乎没有[L,R]或[L,R = 301]或[L,R = 302](如果这是该段中的最后一条规则,则为L我怀疑它是。)。
  2. 你的。*正则表达式可能过于贪婪 - 不确定它们是否会像你想要的那样匹配。