-1

我已经为 URL 创建了一个 htaccess 重写代码,因此当用户访问myurl.com/testing/它时会显示它们,index.php?page=testing但是我希望有第二个或第三个页面,这样它看起来就像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

这可行,但我想让变量成为可选的。如果我没有第二个变量(即只是myurl.com/testing/),那么它说它找不到文件。

4

2 回答 2

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=

您之所以拥有,page=index.php是因为您的规则重写了已经重写的 URL(很多人忘记了,当重写发生时,它会进入下一次迭代并再次开始测试所有规则)。此规则具有忽略现有文件和文件夹的条件(额外检查)。

于 2011-07-23T11:23:28.613 回答
0

为什么不为每个案例设置多个 RewriteRules?

RewriteRule ^([^/]+)/?$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2&var2=$3
于 2011-07-23T10:01:59.447 回答