2017-03-16 71 views
0

我中.htaccess如下:.htaccess重定向;如何複製價值?

RedirectMatch 301 /Search/[my_value]/m(.*) /Search?city=[my_value] 

[my_value]總是在兩個URL相同。我怎樣才能將[my_value]從第一個網址複製到另一個網址?

回答

0

只需使用佔位符引用作爲別名模塊中記錄:

RedirectMatch 301 ^/?Search/([^/]+)/m(.*)$ /Search?city=$1 

或者你也可以改用簡單的重寫規則被改寫模塊可供選擇:

RewriteEngine on 
RewriteRule ^/?Search/([^/]+)/m(.*)$ /Search?city=$1 [R=301] 

這兩種方法都可以在http服務器主機配置中使用,或者如果確實需要,可以在動態配置文件(.htaccess樣式文件)中使用。但是,您絕對應該選擇第一個選項。


你真的應該開始閱讀所使用的工具的文檔。你的問題的答案在那裏:

+0

感謝您的回答。另一個問題。我經常在'.htaccess'代碼中看到'$ 1'。我可以多次使用'$ 1'嗎?或者我應該只在一個'.htaccess'文件中使用它一次(用於單個代碼)? – David

+0

這取決於你想做什麼,沒有一般的答案。如上所述:你爲什麼不簡單閱讀文檔?這就是它所寫的:回答這樣的問題。該文檔具有優良的質量,並附帶很多示例。 – arkascha

0

RedirectMatch使用Regular Expressions

該指令相當於重定向,而是利用了正則表達式,而不是簡單的前綴匹配。

提供的正則表達式與URL路徑匹配,如果匹配,服務器會將所有帶括號的匹配項替換爲給定的字符串並將其用作文件名。

這意味着,捕捉請求的一部分,你必須把它在括號(...),然後在目標URL以此爲$1$2等。


正如@arkascha已經表明,使用[my_value],你(.+?)捕捉它,並在目標添加爲city=$1。第二部分m(.*)$可以用作$2。但是如果你不需要它在目標中,你可以刪除括號並且說m.*$,例如,

RedirectMatch ^/Search/(.+?)/m.*$ /Search?city=$1 

當一切正常時,您可以將狀態碼更改爲301從不301進行測試。