可以說,我已經準備好以下GET變量:有條件的htaccess?
狀態
城市
臥室
浴室
型
價格
現在我希望他們能站出來是這樣的:
mysite.com/state/city/#-bedrooms/#-bathrooms/type/price
不過,我想這個工作,使如果這些變量中的一個不存在,它仍然會工作
即:
mysite.com/state/city/#-bedrooms
或:
mysite.com/state/#-bedrooms/price
我該怎麼做?
可以說,我已經準備好以下GET變量:有條件的htaccess?
狀態
城市
臥室
浴室
型
價格
現在我希望他們能站出來是這樣的:
mysite.com/state/city/#-bedrooms/#-bathrooms/type/price
不過,我想這個工作,使如果這些變量中的一個不存在,它仍然會工作
即:
mysite.com/state/city/#-bedrooms
或:
mysite.com/state/#-bedrooms/price
我該怎麼做?
可以使用?
量詞使正則表達式的某些部分可選。
# 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
...
這是很容易做到的權利在你的代碼:
#.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
你可以使用實際GET變量。 'mysite.com?state=XX&city=YYY&...' – 2011-06-13 03:51:58
是國家強制還是甚至是可選的?在這種情況下,URI是什麼? – anubhava 2011-06-13 03:53:31
這應該可能是PHP處理的事情(不是.htaccess)。 – Frankie 2011-06-13 04:12:59