請幫我將 URL 重定向到子檔案夾,以便將其中的所有內容https://example.com都重寫為https://example.co.uk/subfolder?
該.htaccess檔案需要在/subfolder.
uj5u.com熱心網友回復:
您可以在根.htaccess檔案中執行類似以下操作,以重寫對子檔案夾的所有直接請求。
RewriteEngine On
# Rewrite all direct requests to the `/subfolder` directory
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ subfolder%{REQUEST_URI} [L]
對REDIRECT_STATUS環境變數的檢查確保只有來自客戶端的直接請求(而不是內部重寫的請求)被重寫到/subfolder目錄中(從而避免重寫回圈)。
這也意味著對/subfolder自身的直接請求也將被重寫到/subfolder目錄(即/subfolder/subfolder) - 因此,如果您愿意,您可以擁有一個同名的子檔案夾(否則直接請求/subfolder將導致 404)。也就是說,除非您.htaccess在子檔案夾中有一個額外的檔案也包含 mod_rewrite 指令,在這種情況下這些指令將被覆寫。
更新:在您的問題更新之后,現在說明以下內容......
該
.htaccess檔案需要在/subfolder.
在那種情況下,這是不可能的。將.htaccess請求重寫到 的檔案/subfolder 必須在檔案根目錄(父目錄)中。
如果該.htaccess檔案在其/subfolder自身中,那么它將永遠不會針對該子檔案夾之外的請求進行處理,以便重寫該請求。
uj5u.com熱心網友回復:
懷特先生幾乎已經給出了我應該附在答案中的所有解釋。因此,就像他在他的回答中已經說過的那樣,下面給出的指令應該寫入.htaccess位于https://site1.co.uk指向它的檔案夾中的檔案中,以便它按您的預期作業。
以下是您可以使用的指令。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(. )$ /subfolder/$1 [QSA,L]
</IfModule>
第一個RewriteCond將幫助確保請求不是針對 .htaccess 檔案所在檔案夾中已存在的檔案。
第二RewriteCond行與第一行類似,但它會檢查檔案夾。在此行之后,您可以并且可能應該添加REDIRECT_STATUS來自MrWhite's answer的行。有關解釋,請參閱他的回答。
該RewriteRule行使用正則運算式 (RegEx) 來實作重寫。請記住subfolder將此行替換為您要使用的檔案夾的名稱,并且該檔案夾應該與 .htaccess 檔案所在的位置相同,并且就像已經解釋的那樣,這必須是https://site1.co.uk指向的檔案夾。
希望這可以幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326435.html
