有条件的htaccess?

时间:2011-06-13 03:45:01

标签: php .htaccess mod-rewrite

假设我有以下GET变量可用:

  

状态

     

城市

     

卧室

     

浴室

     

     

现在我希望他们这样出来:

mysite.com/state/city /# - 卧室/# - 浴室/类型/价格

但是,我想要这样做,以便如果其中一个变量不存在,它仍然可以工作

即:

mysite.com/state/city /# - 卧室

或:

mysite.com/state /# - 卧室/价格

我该怎么做?

2 个答案:

答案 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