如何使用不同数量的变量执行mod_rewrite

时间:2013-04-05 03:47:20

标签: .htaccess mod-rewrite

我有一个mod_rewrite规则,通常有3个变量,如:

RewriteRule ^page/(.*)/(.*)/(.*)$ page.php?a=$1&b=$2&c=$3

第3个变量不是强制性的,只是前2个。所以当有人尝试使用page/blah/blahpage/blah/blah/

我知道我可以有2条规则,例如:

RewriteRule ^page/(.*)/(.*)/(.*)$ page.php?a=$1&b=$2&c=$3
RewriteRule ^page/(.*)/(.*)$ page.php?a=$1&b=$2

但这似乎很长。

如何编写一条灵活的规则,允许所有3个网址到达同一页?

  1. /page/blah/blah/blah/
  2. /page/blah/blah
  3. /page/blah/blah/

1 个答案:

答案 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]