Linux
將所有 URL 從 http 重定向到 https(使用 301 ),少數除外
我正在嘗試使用 .htaccess將所有 URL 從 301 重定向
http://
到。https://
應排除一些動態生成的 URL。我不想重定向的一些 URL範例:
example.com/tt.php?xxx (where xxx can be any number) example.com/top/xxx/site/xxx (where xxx can be any number or characters)
現在我的 .htaccess 看起來像這樣:
RewriteEngine On RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
如何“排除”我的動態 URL?
現在我的
.htaccess
樣子是這樣的:如果這就是您文件中的全部內容,那麼您可以在現有的重定向規則之前為要排除的 URL
.htaccess
包含一些例外情況。例如:
# Prevent further processing if requesting a URL of the form # example.com/tt.php?xxx (where xxx can be any number) RewriteCond %{QUERY_STRING} ^\d+$ RewriteRule ^tt\.php$ - [L] # Prevent further processing if requesting a URL of the form # example.com/top/xxx/site/xxx (where xxx can be any number or characters) RewriteRule ^top/[^/]+/site/ - [L]
通過首先放置上述“例外” ,隨後的任何指令(即重定向)都將被跳過。
**更新:**如果您的
.htaccess
文件中有其他指令仍應適用於這些 URL,那麼您可以改為向現有重定向規則添加其他條件。例如:
RewriteCond %{THE_REQUEST} !^[A-Z]{3,6}\s/tt\.php\?\d+\sHTTP RewriteCond %{REQUEST_URI} !^/top/[^/]+/site/ RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^www\. [NC] RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
請注意,前兩個條件在CondPattern
!
上有一個前綴,以否定其含義。因此,僅當正則表達式不匹配時,條件才成功。請注意,我沒有像在第一個範例中那樣使用兩個指令 (
RewriteCond
和RewriteRule
) 來匹配 URL ,/tt.php?xxx
而是將其組合成一個規則並匹配THE_REQUEST
- 這是為了簡化這條規則中的邏輯。
THE_REQUEST
server 變數保存 HTTP 請求的第一行。