2009-10-17 57 views
0

RewriteRule ^([^/\.]+)/$ $1 [R]website.com/abc/重定向到website.com/home/user/www/abc如何在Apache中使用RewriteRule從/ abc /重定向到/ abc?

如何重定向到正確的位置? (website.com/abc

+0

你的假設看起來不正確,你的重寫過程將'nothing-slash /'重定向到'nothing-slash'。這意味着,重定向到'/ home/etc ...'必須在其他地方引起 – Abel 2009-10-17 18:50:22

+0

感謝Abel的回覆,但是沒有其他地方我重定向頁面,並且我刪除了所有其他重寫規則。我仍然被重定向到錯誤的地方。 – admin 2009-10-17 19:36:12

+0

你有沒有其他可能與此相沖突的規則?一般情況下,你會把那些導致外部重定向的規則放在引起內部重定向的那些規則之前。 – Gumbo 2009-10-18 08:26:29

回答

0

RewriteRule的第一部分是匹配部分,第二部分是替換表達式。對於完整網址RewriteRule s,它們應該以^/(斜線)開頭,因爲http://exampl.com之後的路徑總是以root-slash開頭。要重定向到http://example.com/abc/http://example.com/abc(去掉斜線),你可以這樣做:

RewriteEngine On 
RewriteRule ^/([^/]+/$ /$1 [R] 
+0

A)被遺漏了,所以我試了這三個: RewriteRule^/([^ /])+/$/$ 1 [R] RewriteRule^/([^ /] +)/ $/$ 1 [R] RewriteRule我仍然被重定向到example.com/home/user/www/abc而不是example.com/abc – admin 2009-10-17 19:17:15

+0

其他用戶已經評論過要使用''/ ^'[$] $/$ 1 [R] 。 L'來完成它(L代表Last),並阻止其他重寫規則彈出。另外,如果你的頁面包含重定向,或者頁面頭部有重定向,那麼你可以在Apache中嘗試你想要的,但它將無濟於事。你能提供一個例子鏈接發生這種情況? – Abel 2009-10-18 14:03:38

0

它看起來像網址已經被改寫爲文件名,然後你重寫的文件名。當在.htaccess文件中指定重寫規則時,通常會發生這種情況。問題在於,在Apache讀取.htaccess文件時,它已經將所有URL解析爲文件名。標準的解決方案是在你的.htaccess中提供一個RewriteBase規則。嘗試:

RewriteBase/

你上面的重寫規則對於初學者。

更多文檔here

+0

在.htaccess中僅使用此規則和RewriteEngine,我仍然被重定向到website.com/home/user/www/abc。添加RewriteBase /給出了與提及'.htaccess'相同的結果 – admin 2009-10-17 19:21:27

+0

。你可以調整'httpd.conf'嗎?你是否在一個主機環境,他們只是不允許這樣做? – Abel 2009-10-18 14:06:34

+0

沒有RewriteBase沒有辦法做到這一點?這個網站部署在幾個不同的路徑下(用於測試/開發),並且我希望在任何地方都有相同的.htacess工作。 /〜user/site/...不斷變成/ home/user/site,當然,這個URL不存在!我不想把/用戶作爲RewriteBase,因爲它必須改爲「user2」 – 2011-09-09 16:41:04

0

你可以用附加L嘗試它標誌,以避免任何進一步的規則應用:

RewriteRule ^([^/\.]+)/$ /$1 [R,L] 

但如果沒有別的辦法,試試這個:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^/.?\ ]+)/[? ] 
RewriteRule ^[^/.]+/$ %1 [R] 
相關問題