假设我有以下GET变量可用:
状态
城市
卧室
浴室
型
价
现在我希望他们这样出来:
mysite.com/state/city /# - 卧室/# - 浴室/类型/价格
但是,我想要这样做,以便如果其中一个变量不存在,它仍然可以工作
即:
mysite.com/state/city /# - 卧室
或:
mysite.com/state /# - 卧室/价格
我该怎么做?
答案 0 :(得分:1)
您可以使用?
量词制作正则表达式的一部分。
# state city bedrooms bathrooms
RewriteRule ^(\w+)(?:/(\w+))?(?:/(\d+)-bedrooms)?(?:/(\d+)-bathrooms)?$
script.php?state=$1&city=$2&bedrooms=$3&bathrooms=$4
# add further (?:(\d+)-placeholders)? for the other optional parts
但如果子模式不匹配,则会重写为空变量。
所以也许您应该定义具有不同具体性的RewriteRules的列表:
RewriteRule ^(\w+)/(\d+)-bedrooms$ scr?state=$1&bed=$2
RewriteRule ^(\w+)/(\w+)/(\d+)-bedrooms$ scr?state=$1&city=$2&bed=$3
...
答案 1 :(得分:1)
在代码中更容易做到:
#.htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ /index.php [QSA,L]
您可以使用您想要处理请求URI的任何逻辑:
#index.php
<?php
$request = explode('/', ltrim($_SERVER['REQUEST_URI'], '/'));
$state = array_shift($request);
$city = array_shift($request);
// and so on