2011-06-13 63 views
0

可以說,我已經準備好以下GET變量:有條件的htaccess?

狀態

城市

臥室

浴室

價格

現在我希望他們能站出來是這樣的:

mysite.com/state/city/#-bedrooms/#-bathrooms/type/price

不過,我想這個工作,使如果這些變量中的一個不存在,它仍然會工作

即:

mysite.com/state/city/#-bedrooms

或:

mysite.com/state/#-bedrooms/price

我該怎麼做?

+2

你可以使用實際GET變量。 'mysite.com?state=XX&city=YYY&...' – 2011-06-13 03:51:58

+0

是國家強制還是甚至是可選的?在這種情況下,URI是什麼? – anubhava 2011-06-13 03:53:31

+1

這應該可能是PHP處理的事情(不是.htaccess)。 – Frankie 2011-06-13 04:12:59

回答

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的列表有不同specificness:

RewriteRule ^(\w+)/(\d+)-bedrooms$ scr?state=$1&bed=$2 
RewriteRule ^(\w+)/(\w+)/(\d+)-bedrooms$ scr?state=$1&city=$2&bed=$3 
... 
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