2013-03-22 99 views
3

如何在.htaccess文件中執行通配符重定向?使用通配符重定向到.htaccess

我嘗試使用以下內容,但*因某些原因不起作用。

redirect 301 /threads/*.343/ http://myotherdomain.com/threads/*.343/

我不能使用mod_rewrite,因爲我有這些重定向,我需要做的7000,顯然,當我試圖約一半的,我的服務器拋出了一個500錯誤配置錯誤。

因此,看起來寫上述代碼的7000行是某種程度上不太密集。

無論如何,請讓我知道如何在這種代碼中表達通配符。

回答

1

你不需要單獨的7000條重寫規則,只需要用RewriteMap

1 - 首先,在兩列像這樣創建的所有7000個選擇ID的文本文件:

343 343 
349 349 
518 518 

2 - 然後在httpd.cond限定RewriteMap指令是這樣的:

RewriteMap idmap txt:/path/to/file/map.txt 

3 - 然後通過httpd.conf和第啓用的mod_rewrite和htaccess的恩把這個代碼在你.htaccessDOCUMENT_ROOT目錄下:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^threads/(.*)$ http://myotherdomain.com/threads/${idmap:$1} [L,NC,R=301] 
+0

我有7000個不同的ID,在代碼結尾的數字。因此我需要編寫7000行。如果我用mod_rewrite表示它,如下所示。 (343 | 225 | 435 | 677 | 787 | 89 | 764 | 865 | 934)/(。*)$ http://www.example2.com/線程/ $ 1/$ 2 [R = 301,L]' ^問題的這個代碼是具有甚至3500的ID更不用說7000使我的網站拋出服務器錯誤配置錯誤(500) – Maaz 2013-03-22 21:06:21

+0

以及在這種情況下:'重寫規則^ (線程/ [^。] + \。[0-9] +)/?$ http://myotherdomain.com/$1 [L,NC,R = 301]'會對你更好。 – anubhava 2013-03-22 21:11:17

+0

有特定的7000個ID。我不希望所有URL都重定向,只有7000個ID內的那些URL。 – Maaz 2013-03-22 21:55:33

3

隨着mod_alias中,你可以使用RedirectMatch代替:

RedirectMatch permanent ^/threads/[^/]+\.343/$ http://myotherdomain.com$0 

這場比賽/threads/*.343/*是任何字符(或多個)不同的是所有URL匹配/

+0

我假設'永久'照顧整個301重定向? – Maaz 2013-03-22 21:10:56

+0

我有一個小問題。我認爲它不完全匹配ID。這個數字'343',現在看來似乎接受'3433'如果重定向狀態'343'。無論如何說最後的數字必須是確切的? – Maaz 2013-03-22 21:20:51

+1

轉義'.'會解決它,請參閱修訂後的答案。是的,'permanent'是一樣的'301'(您可以使用)。 – 2013-03-23 09:55:50