2013-10-13 174 views
0

我想打一個複雜的重寫規則在我.htaccess,我的網址:的.htaccess複雜的正則表達式

domain.com/?w={WHAT}&l={WHERE}&r={RADIUS}&f={FILTER} 

我想重定向到後續URL結構:

  1. 如果W和L不爲空

    domain/{WHAT}-jobs-in-{WHERE} 
    
  2. 如果w是不是空的,l是空

    domain/{WHAT}-jobs 
    
  3. 如果w是空的,l是不是空

    domain/jobs-in-{WHERE} 
    
  4. 上述所有,如果有其他PARAMS然後把它們在年底形式:

    domain/{WHAT}-jobs-in-{WHERE}/?r={RADIUS}&f={FILTER} 
    
+2

你可以添加你在你的問題中嘗試過嗎? – Jerry

+0

另外,什麼是「空」?你的意思是這個參數完全缺失,還是隻是沒有價值?幾個例子總是很好。 –

+0

是的,空的意思是參數丟失,沒有設置或值爲空 –

回答

0

這3條規則應該做的工作:

RewriteEngine On 

# if not domain.com then bail out 
RewriteCond %{HTTP_HOST} !^(www\.)domain\.com$ [NC] 
RewriteRule^- [L] 

RewriteCond %{QUERY_STRING} ^w=([^&]+)&l=([^&]+)(?:&(.+))?$ [NC] 
RewriteRule ^$ /%1-jobs-in-%2?%3 [L,NE,R=302] 

RewriteCond %{QUERY_STRING} ^w=([^&]+)(?:&l=&)?(.*)$ [NC] 
RewriteRule ^$ /%1-jobs?%2 [L,NE,R=302] 

RewriteCond %{QUERY_STRING} ^(?:w=&)?l=([^&]+)(?:&(.+))?$ [NC] 
RewriteRule ^$ /jobs-in-%1?%2 [L,NE,R=302] 

# replace + by - recursively 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^+]*)\+(.*)$ /$1-$2 [L,R] 
+0

嘿anubhava,感謝您的快速響應。我會測試它並回寫。你是否在這個規則中規定了w的順序,l是否是重要的?因爲有時訂單可以是?w = bla&l = blu和?l = blue&w = bla ..你有什麼事? –

+0

那麼這段代碼需要維護訂單。有可能讓它不可知,但這會使這些規則變得更加複雜。 – anubhava

+0

嗯,這意味着我需要修復順序永遠不變。好吧,我會嘗試。有一件事:你可以在這個規則中添加域名嗎?因爲我有不同的域名,每個域名都有不同的「jobs」字樣,這就是爲什麼我需要規則中的domain.com。 –