2

我正在尝试美化一个 url 以摆脱丑陋的东西,例如:

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

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

4

2 回答 2

1

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

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

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

于 2013-02-28T22:07:21.603 回答
0

我必须查看更多您的 httpd 配置,但这里有一些注意事项:

  1. 您的规则末尾似乎没有 [L,R] 或 [L,R=301] 或 [L,R=302] (如果这是我怀疑的片段中的最后一条规则,则为 L是)。
  2. 您的 .* 正则表达式可能过于贪婪——不确定它们是否会像您希望的那样匹配。
于 2013-02-28T20:02:01.870 回答