2013-07-09 58 views
1

希望有人可以幫我這個問題...htaccess的重寫規則不處理

我有一個重寫規則在我htaccess文件設置看起來像這樣

RewriteRule ^/?find/(.+)/?in/(.+)/(.+)/ /page.html?&type=$1&city=$2&state_abbrev=$3 [L,QSA] 

的重寫工作正常,如果我有一個URL包含所有參數指定例如:http://www.site.com/find/doctors/in/dallas/tx/

問題是,我想這個重寫工作,即使其中一個參數丟失。例如,如果我只輸入http://www.site.com/find/doctors/,我仍然希望它重定向到'page.html',而沒有完成參數。所以在這種情況下,它將寫入http://www.site.com/page.html?type=doctors&city=&state_abbrev=。目前,如果我輸入一個沒有所有參數的URL,RewriteRule將不起作用。任何想法如何解決這個問題?

在此先感謝...

+0

等參數?應該/找到// //中的TX /重定向到page.html中類型=城市= state_abbrev = TX? –

回答

1

這個替換您的規則:

RewriteRule ^/?find/([^/]+)(?:/in/?([^/]*)/?([^/]*)/?)? /page.html?type=$1&city=$2&state_abbrev=$3 [L,QSA] 
+0

工作就像一個魅力 - 謝謝你! –

+0

不錯的@anubhava –

+0

不客氣@Pjack。很高興知道它爲OP做好了準備。 – anubhava

1

沒有什麼能夠阻止您進行多次重寫。我在.htaccess中有許多不同的東西,而且很多時候你必須這樣做。沒有一次重寫會適用於所有場合。

你可以試試這個。

RewriteEngine on 
RewriteRule ^find/(.*)/in/(.*)/(.*) page.html?type=$1&city=$2&state_abbrev=$3&%{QUERY_STRING} [L] 
RewriteRule ^find/(.*) page.html?type=$1&%{QUERY_STRING} [L] 

它首先會查找完整的URL

http://www.site.com/find/doctors/in/dallas/tx 

然後前進到第一個重寫規則。

不過,如果你使用這個

http://www.site.com/find/doctors 

將跳過第一條規則,它會匹配第二個規則重定向到只是部分查詢字符串。

希望幫助,但你可以儘可能多的rulesconditions你想要的。而他們來的順序確實是的事。

+0

感謝您的詳細回覆 - 非常有幫助! –

+0

沒問題,很高興你有一個工作解決方案。如果它是有用的,你可以始終保持樂觀。 –

+0

對不起,忘了:)現在所有設置,再次感謝 –