有没有人知道这个重写规则的问题是什么?
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个或更多。
答案 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
为空;没有办法让这个捕获被“跳过”。