如何将第二个可能的变量添加到干净的URL?

时间:2011-07-23 09:39:29

标签: .htaccess mod-rewrite clean-urls

我已经为网址创建了一个htaccess重写代码,因此当用户转到myurl.com/testing/时,它会显示index.php?page=testing但是我想要第二页或第三页,因此它看起来像{{ 1}}并显示用户myurl.com/testing/2832/9283

这是我目前的代码:

index.php?page=testing&var1=2832&var2=9283

这有效,但我想让变量可选。如果我没有第二个变量(即只是RewriteRule ^([^\/]+)/([^\/]*)/$ index.php?page=$1&var1=$2 RewriteRule ^([^\/]+)/([^\/]*)$ index.php?page=$1&var1=$2 ),那么它说它无法找到该文件。

2 个答案:

答案 0 :(得分:1)

# 3-level deep parameters
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(/([^/]+))?(/([^/]+))?(/)?$ /index.php?page=$1&var1=$3&var2=$5 [QSA,L]
  1. 此规则不会触及现有文件和文件夹。

  2. 此规则将重写:

    • /help/tracking/123456/ => /index.php?page=help&var1=tracking&var2=123456
    • /help/tracking => /index.php?page=help&var1=tracking&var2=
    • /help => /index.php?page=help&var1=&var2=
  3. 你有page=index.php,因为你的规则重写了已经重写过的网址(很多人都忘记了,当重写发生时,它会进入下一次迭代并开始测试所有规则再次) 。此规则具有条件(额外检查)以忽略现有文件和文件夹。

答案 1 :(得分:0)

为什么不为每种情况设置多个RewriteRules?

RewriteRule ^([^/]+)/?$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2&var2=$3