将所有 URL 从 http 重定向到 https (使用 301 ),除了少数

将所有 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?

答案1

现在我的.htaccess样子是这样的:

如果这就是你的.htaccess文件中的全部内容,那么你可以包含一些例外对于要排除的 URL现有的重定向规则。

例如:

# 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]

请注意,前两个条件!条件模式来否定其含义。因此,只有当正则表达式满足以下条件时,条件才会成功:不是匹配。

请注意,我没有像第一个示例中那样使用两个指令(RewriteCondRewriteRule)来匹配 URL,而是/tt.php?xxx将其组合成一条规则并进行匹配THE_REQUEST- 这是为了简化此规则中的逻辑。

THE_REQUEST服务器变量保存 HTTP 请求的第一行。

相关内容