特定的 30 倍重定向
如何在 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/?foo
到example.com/foo
,您可以執行以下操作:RewriteCond %{QUERY_STRING} ^(foo)$ RewriteRule ^$ /%1 [QSD,R,L]
%1
在最後一個匹配條件中對第一個擷取的組的反向引用在哪裡。請注意,上面的範例中沒有 URL 路徑(由 regex 表示^$
)。(QSD
Query String Discard) 標誌需要從重定向的 URL 中刪除查詢字元串。如果您想要一個更“萬用字元”的變體(匹配查詢字元串中的任何內容),正如您在範例中所建議的那樣,那麼類似:
RewriteCond %{QUERY_STRING} ^(.+)$ RewriteRule ^$ /%1 [QSD,R,L]
請注意,
R
沒有狀態程式碼的標誌預設為 302(臨時)重定向。