簡體   English   中英

相同網址的Apache重定向規則

[英]Apache redirect rule for the same url

我正在嘗試將RewriteCondRewriteRule編寫為以下內容。

如果有人嘗試訪問forex.com或forexample.com,則他們都應重定向到

forexample.com/abcd/xyz/

以下重寫條件適用於forex.com

RewriteCond %{HTTP_HOST} ^forex\.com [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [R,NE]

但是,當我添加如下所示的另一條規則時,它將轉到重定向循環

RewriteCond %{HTTP_HOST} ^forexample\.com [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [R,NE]

任何幫助將不勝感激。

這是有效的,因為forex.comforexample.com是不同的域:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^forex\.com [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [R,NE]

但是在第二種情況下,我認為問題在於您設置的規則會將https://forexample.com/上的任何內容重定向到https://forexample.com/abcd/xyz/即使它已經在https://forexample.com/abcd/xyz/

RewriteEngine On
RewriteCond %{HTTP_HOST} ^forexample\.com [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [R,NE]

因此,請檢查REQUEST_URI不是abcd/xyz/ ,您應該會很好:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^forexample\.com [NC]
RewriteCond %{REQUEST_URI} !^/(abcd/xyz/.*)$ [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [L,R,NE]

但是,再HTTP_HOST ,第一個HTTP_HOST規則就沒有意義了。 也許您希望它就是這樣:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(abcd/xyz/.*)$ [NC]
RewriteRule ^(.*)$ https://forexample.com/abcd/xyz/ [L,R,NE]

調試此類內容的一種好方法是從命令行使用curl -I 該命令將向您顯示根據規則或請求獲取的確切HTTP標頭。 所以像這樣使用它; 以我的MAMP測試環境為例:

curl -I http://localhost:8888

對我來說輸出是:

HTTP/1.1 302 Found
Date: Sat, 28 Jun 2014 02:19:39 GMT
Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8y DAV/2 PHP/5.4.10
Location: http://localhost:8888/abcd/xyz/
Content-Type: text/html; charset=iso-8859-1

請注意HTTP/1.1 302 Found這表示它是一個臨時重定向)和Location: http://localhost:8888/abcd/xyz/ ,指示規則在哪里將對http://localhost:8888的調用重寫為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM