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

问题描述:

我试图美化URL从喜欢的事,丑陋的地方:为什么我的mod重写规则不起作用?

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 

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

+1

看起来第一个斜线不需要在那里。尝试将'^/n /'改为'^ n /'。顺便提一下,你可能也想逃避你的斜线,就像这样:'\ /'。 [在这里测试](http://rubular.com/r/yXtQKroADZ)。 – showdev 2013-02-28 19:55:41

+0

@showdev开始正斜杠!我觉得我好笨。 – willdanceforfun 2013-02-28 20:08:55

+1

不要觉得愚蠢。这些事情可能很复杂。我经常发现[regex工具](http://rubular.com/)很有帮助。这是一个特定于.htaccess的[测试工具](http://htaccess.madewithlove.be/)。 – showdev 2013-02-28 20:12:48

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

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

模式中的前导斜杠导致它永远不匹配,因为htaccess文件中的所有URI都将其剥离。在htaccess文件中重写规则基本上就像容器中的规则。尝试摆脱那个斜线。

我不得不看到更多的httpd设置的,但这里有一些注意事项:

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