2016-02-15 86 views
1

通過的.htaccess 我要301重定向在URL參數 「pathval」 到 「路徑」,如:的.htaccess:301重定向 「INSTR」 URL參數路徑

index.php?a=1&b=2&pathval=a_text_string&c=3 

到:

甚至更​​好:

index.php/a_text_string?a=1&b=2&c=3 

如果「pathval」是唯一的URL參數,我發現了許多針對此重定向的解決方案。

,但我沒能得到它的價值時,有在QUERY_STRING參與其他參數和所有參數可以以任意順序可以包含任何價值

所以可以調用(1),其所定向可以是:

  • 的index.php一個= 1 & B = 2 & C = 3(這裏就沒有重定向)
  • 的index.php?pathval = a_text_string
  • 的index.php?pathval = a_text_string &一個= 1 & b = 2 & C = 3
  • 的index.php?一個= 1 & B = 2 & pathval = a_text_string & C = 3
  • 的index.php?a = 1時& B = 2 & C = 3 & pathval = a_text_string

我會很高興,如果有人可以給我一個所有可想象的案例的一般解決方案。

(1):在我的例子中,爲了更好的可見性,其他參數a,b,c都是數字,但這不是一個規則。也可能包含字符串或甚至是空的。

回答

1

您可以使用在你的問題中描述的所有情況下,這個通用規則:

RewriteEngine On 

RewriteCond %{THE_REQUEST} \?(.*&)?pathval=([^&]*)&?(\S*)\sHTTP [NC] 
RewriteRule ^index\.php$ %{REQUEST_URI}/%2?%1%3 [R=302,NE,L] 

要刪除&&或前/後&使用這樣的規則:

RewriteCond %{QUERY_STRING} ^&|&&|&$ 
RewriteCond %{QUERY_STRING} ^&?(.*?)(?:&&(.*))?&?$ 
RewriteRule^%{REQUEST_URI}?%1&%2 [R=302,NE,L] 
+0

謝謝你的快速解答。在我的測試中,它似乎工作得很好。我發現的唯一情況是它似乎在pathval後面留下了「&」:所以'index.php?a = 1&pathval = a_text_string&b = 2'會導致'index.php/a_text_string?a = 1 && b = 2'和'index.php?pathval = a_text_string&a = 1&b = 2'到'index.php/a_text_string?&a = 1&b = 2'。有沒有辦法去除這個呢? – Wooz

+2

@Wooz使用'pathval =([^&] *)&?(\ S *)\ sHTTP' – hjpotter92

+0

Thanks @ hjpotter92(added it to my answer) – anubhava