我有一个mod_rewrite规则,通常有3个变量,如:
RewriteRule ^page/(.*)/(.*)/(.*)$ page.php?a=$1&b=$2&c=$3
第3个变量不是强制性的,只是前2个。所以当有人尝试使用page/blah/blah
或page/blah/blah/
{ p>
我知道我可以有2条规则,例如:
RewriteRule ^page/(.*)/(.*)/(.*)$ page.php?a=$1&b=$2&c=$3
RewriteRule ^page/(.*)/(.*)$ page.php?a=$1&b=$2
但这似乎很长。
如何编写一条灵活的规则,允许所有3个网址到达同一页?
/page/blah/blah/blah/
/page/blah/blah
/page/blah/blah/
答案 0 :(得分:0)
你可以在根目录下的一个.htaccess文件中尝试这样的事情:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !page\.php [NC]
RewriteRule ^page/([^/]+)/([^/]+)/?([^/]+)?/? /page.php?a=$1&b=$2&c=$3 [L,NC]
当只有2个参数时,第三个参数是可选的,键 c
将为空。
如果您不想要空键值,请将上述规则集替换为以下规则:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !page\.php [NC]
RewriteRule ^page/([^/]+)/([^/]+)/([^/]+)/? /page.php?a=$1&b=$2&c=$3 [L,NC]
RewriteCond %{REQUEST_URI} !page\.php [NC]
RewriteRule ^page/([^/]+)/([^/]+/?$ /page.php?a=$1&b=$2 [L,NC]