我已经为网址创建了一个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
),那么它说它无法找到该文件。
答案 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]
此规则不会触及现有文件和文件夹。
此规则将重写:
/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
,因为你的规则重写了已经重写过的网址(很多人都忘记了,当重写发生时,它会进入下一次迭代并开始测试所有规则再次) 。此规则具有条件(额外检查)以忽略现有文件和文件夹。
答案 1 :(得分:0)
为什么不为每种情况设置多个RewriteRules?
RewriteRule ^([^/]+)/?$ index.php?page=$1
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?page=$1&var1=$2&var2=$3