[英]Change domain redirect all URLs exactly except one URL that must be redirect to a different URL
[英]Redirect all URL except one at alias domain
我有兩個子域private
和public
(但public
只是private
的別名)和一個主域www
。 我需要將所有 URL 從public
子域重定向到www
,除了現有的 PDF 文件和一個 URL 地址。 我有這些工作正常的規則,但我無法為某個 URL 添加例外。
例如:
public.example.com
=> www.example.com
// OKpublic.example.com/any-existing-file.pdf
=> 停留在public.example.com/any-existing-file.pdf
// OKpublic.example.com/any-not-existing-file.pdf
=> www.example.com
// OKpublic.example.com/anything-except-certain-url-below
=> www.example.com
// 好的public.example.com/certain-url
=> 需要留在public.example.com/certain-url
,但它被重定向到www.example.com
// KO 我的.htaccess
文件中有這些規則。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^public\.example\.com$
RewriteRule ^$ http://www.example.com/ [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^private\.example\.com
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ %{REQUEST_URI}/ [R=301,QSA,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/?$ ?page=$1 [QSA,L]
RewriteCond %{HTTP_HOST} ^public\.example\.com$ RewriteRule ^$ http://www.example.com/ [R=301,L]
這是有問題的相關規則。 但是,如所寫(以及我之前的評論中提到的),這只會重定向對文檔根目錄的請求(如^$
正則表達式所示)。 IE。 此規則僅將http(s)://public.example.com/
重定向到http://www.example.com/
(為什么是http
?),僅此而已。
您可以看到場景 #3、#4 和 #5 的重定向的唯一方法是,如果您有(或曾經有)執行此操作的不同規則,並且您現在可能看到緩存的重定向。 301(永久)重定向由瀏覽器持久緩存。
但是,您還通過前端控制器路由對所有不存在文件的請求(最后一條規則),除非您忽略了包含處理請求的實際文件(我假設index.php
因為您已經標記了問題php
) ,因此您依賴正確設置的DirectoryIndex
。 因此,您的前端控制器也可能會啟動這些重定向(在 PHP 中)?
要在.htaccess
中執行必要的重定向,您需要將上述規則更改為類似以下內容,將其分成兩條規則:
# Skip the next rule if requesting a PDF file that exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.pdf$ - [S=1]
# Redirect public to www except "/certain-url"
RewriteCond %{HTTP_HOST} ^public\.example\.com [NC]
RewriteRule !^certain-url$ http://www.example.com/ [R=301,L]
請注意,與RewriteRule
模式匹配的 URL 路徑不以斜杠開頭。
首先使用 302(臨時)重定向進行測試,以避免潛在的緩存問題。 在測試之前,您需要清除瀏覽器(和任何中間緩存)。
但是,如前所述,您可能仍然需要首先解決這些重定向的來源,因為它們不是來自問題中發布的規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.