.htaccess限定符问题

时间:2011-05-14 09:11:50

标签: php apache .htaccess mod-rewrite

有没有人知道这个重写规则的问题是什么?

RewriteRule ^example/?(.*)/?(.*)/?(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]

?视为有条件的,不应该有效吗?

修改好的,让我重新解释一下我的问题。

如果Apache为空,如何让Apache忽略$1 - $3,而只是转到example.php?

例如,而不是3行:

RewriteRule ^example/(.*)/(.*)/(.*)$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]
RewriteRule ^example/(.*)/(.*)$ example.php?id=$1&ud=$2 [QSA,L]
RewriteRule ^example/(.*)$ example.php?id=$1 [QSA,L]

我需要一行来解决所有3个或更多。

3 个答案:

答案 0 :(得分:1)

贪婪考虑使您的规则等同于以下内容:

RewriteRule ^example/?(.*)$ example.php?id=$1 [QSA,L]

你可能想要这个:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]

根据您对问题所做的最近编辑,我会使用多个规则:

RewriteRule ^example/([^/]+)/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]
RewriteRule ^example/([^/]+)/([^/]+)/?$ example.php?id=$1&ud=$2 [QSA,L]
RewriteRule ^example/([^/]+)/?$ example.php?id=$1 [QSA,L]

答案 1 :(得分:1)

错误的RewriteEngine可能导致404错误。要解决参数问题,请使用:

RewriteEngine on
RewriteRule ^example/?([^/]+)?/?([^/]+)?/?([^/]+)?/?$ example.php?id=$1&ud=$2&ed=$3 [QSA,L]

答案 2 :(得分:1)

  

检测不应该起作用吗?作为条件?

当然,但后面的参考仍然按顺序填写。如果第一个括号(.*)与空字符串匹配,则$1为空;没有办法让这个捕获被“跳过”。