簡體   English   中英

重定向所有 URL 除了別名域中的一個

[英]Redirect all URL except one at alias domain

我有兩個子域privatepublic (但public只是private的別名)和一個主www 我需要將所有 URL 從public子域重定向到www ,除了現有的 PDF 文件和一個 URL 地址。 我有這些工作正常的規則,但我無法為某個 URL 添加例外。

例如:

  1. public.example.com => www.example.com // OK
  2. public.example.com/any-existing-file.pdf => 停留在public.example.com/any-existing-file.pdf // OK
  3. public.example.com/any-not-existing-file.pdf => www.example.com // OK
  4. public.example.com/anything-except-certain-url-below => www.example.com // 好的
  5. 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.

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