2013-07-30 142 views
0

我試圖找出我怎麼能寫重寫規則htaccess的一個可選的部分。通常我有這個:可選的URL部分重寫規則

RewriteRule ^([a-z\-]+)/([A-Za-z\-]+)/([A-Za-z\-]+)/([0-9]+)/([0-9]+)/([0-9]+)\-([A-Za-z0-9\-]+)$ /system.php?lang=$1&category=$2&subcategory=$3&year=$4&month=$5&id=$6&title=$7 [QSA,L] 

它工作正常,如果我有地址例如

http://dev.example.com/en/blog/usa/2013/9/1-title-of-post 

結果是:

$_GET["lang"]="en"; 
$_GET["category"]="blog"; 
$_GET["subcategory"]="usa"; 
$_GET["year"]=2013; 
$_GET["month"]=9; 
$_GET["id"]=1; 
$_GET["title"]="title-of-post"; 

但有時我只是想用類似的地址:

http://dev.example.com/en/about/me 

而且我想這樣的:(我的意思是沒有定義其它的值,但服務器找到那個地址)

$_GET["lang"]="en"; 
$_GET["category"]="about"; 
$_GET["subcategory"]="me"; 
$_GET["year"]=null; 
$_GET["month"]=null; 
$_GET["id"]=null; 
$_GET["title"]=null; 

所以我希望可選部分從一年開始,但如果有人用年份和其他語句寫地址,我想採用它。

謝謝你YOUT幫助!

+0

究竟什麼是你想匹配轉移後?一點都不清楚。根據什麼標準,你希望它匹配什麼標準,你希望它不匹配?你是否希望它在域名後面有三個以斜線分隔的部分,可選地後跟一個由三個斜線分隔的數字組成的日期,並且只有在這些情況下,一些附加的東西由連字符與日期分開?我從正則表達式中推斷出這一點,但描述並沒有說明你想做什麼。 –

+0

哦也,做的第一部分一定是小寫,而資本被允許以其他方式?這正是正則表達式所要求的。 –

回答

1

基於新的信息,我想我明白你想要做什麼。我相信這將工作:

RewriteRule ^([a-z\-]+)/([A-Za-z\-]+)/([A-Za-z\-]+)(/([0-9]+)/([0-9]+)/([0-9]+)-([A-Za-z0-9\-]+))?$ /system.php?lang=$1&category=$2&subcategory=$3&year=$5&month=$6&id=$7&title=$8 [QSA,L] 

注意改變號碼的匹配變量($ 1等)。你需要一個一次性的匹配組來使第二部分可選,所以編號跳過一個。今年是現在$ 5,一切由1

+0

感謝您的幫助,併爲我的弱規格感到抱歉。我增加了我期望從地址獲得的價值。我想在兩個地址中顯示一些內容(沒有404錯誤),更具體的地址有更多的值。我知道,解決方案可能是寫入規則(1長地址和1個短),但今後將是巨大的,有一個規則。 我這樣做的網站,我有正常的網頁(短地址)和博客,我需要更具體的地址。 希望現在它更清晰,對不起英語是我的第二語言。 – Draq

+0

好吧,現在我想我可以得到這張照片了 - 你想要對捕獲組進行什麼,以及爲什麼所有的重複。給我幾分鐘... –

+0

哦,我愛你!恩,也許不是 - 但是,非常感謝你! :) – Draq