Dot-Htaccess

特定的 30 倍重定向

  • August 15, 2019

如何在 htaccess 中進行 30 倍重定向,但僅適用於以此開頭的 URL:

http://example.com/x/*

我想將這些重定向到(HTTPS):

https://example.com/x/*
  • 如萬用字元,如:example.com/x/batman

我不希望重定向影響此域上的任何其他 URL。

我可以使用 PHP 進行此重定向,但我的理解是,如果我在我的.htaccess文件中執行此操作,它會稍微快一點,因為不必執行 PHP。那是對的嗎?基本上,我正在嘗試盡可能快的直接。

這是我到目前為止所擁有的,但它一點也不多。它確實有效,它成功地將 https 重定向到 http,但我需要它只用於特定的 url,遵循上述模式:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

要匹配開始的特定 URL 路徑,/x/然後將其更改RewriteRule為讀取^x/(無斜杠前綴)。例如:

RewriteRule ^x/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

您需要在測試前清除瀏覽器記憶體。(因此,首先使用臨時 302 重定向進行測試更容易。)

但是,關於您的指令的一些注意事項……

  • 這顯然是從 HTTPS 重定向到 HTTP - 與您在之前的範例中所說的相反(並且在 2019 年非常不推薦)?!
  • HTTPS 環境變數(即)的使用%{ENV:HTTPS}是非標準的。大概這是在您的主人的指示下?

https://example.com/?wildcard被重定向到http://example.com/wildcard

RewriteRule 模式(例如^x/上面)僅與 URL 路徑匹配 - 特別是排除了 URL 的查詢字元串部分。

要匹配查詢字元串,您需要一個與伺服器變數匹配的RewriteCond( condition ) 指令。QUERY_STRING

例如,要重定向example.com/?fooexample.com/foo,您可以執行以下操作:

RewriteCond %{QUERY_STRING} ^(foo)$
RewriteRule ^$ /%1 [QSD,R,L]

%1在最後一個匹配條件中對第一個擷取的組的反向引用在哪裡。請注意,上面的範例中沒有 URL 路徑(由 regex 表示^$)。( QSDQuery String Discard) 標誌需要從重定向的 URL 中刪除查詢字元串。

如果您想要一個更“萬用字元”的變體(匹配查詢字元串中的任何內容),正如您在範例中所建議的那樣,那麼類似:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ /%1 [QSD,R,L]

請注意,R沒有狀態程式碼的標誌預設為 302(臨時)重定向。

引用自:https://serverfault.com/questions/979281