使用一个必填查询字符串和另一个可选查询字符串重写URL

时间:2016-01-29 21:24:25

标签: regex apache .htaccess mod-rewrite

我想重写以下网址:

http://domain.com/quiz/1/234

http://domain.com/quiz.php?id=1&uid=234

我在htaccess文件中有以下规则:

RewriteRule ^quiz/([0-9]+)/([0-9]+)$ quiz.php?id=$1&uid=$2 [L]

使用上述规则,两个查询字符串必须存在于要重写的URL中;我想更改此行为并使第二个查询字符串(示例中为234)是可选的,以便在调用以下URL时:

http://domain.com/quiz/1

它将重定向到:

http://domain.com/quiz.php?id=1

如果我打电话:

http://domain.com/quiz/1/234

它将重定向到:

http://domain.com/quiz.php?id=1&uid=234

我可以使用2个单独的规则来实现这一点,但我认为有更正确的方法来实现它。

1 个答案:

答案 0 :(得分:0)

RewriteRule ^quiz/(\d+)(?:/(\d+))?/?$ quiz.php?id=$1&uid=$2 [L,NC,QSA]

(?:/(\d+))?使用可选的尾部斜杠使第二部分完全可选。