在正则表达式中跳过一个字符串

Skip one string in regex

我有以下 apache 重写规则:

000-default.conf:    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

我该如何更改它以允许所有内容,除非以下字符串在 url 中:tab=availability ?

您可以在 RewriteRule 本身使用否定:

RewriteRule !tab=availability https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]

这将重定向所有 URI 不包含给定模式的请求。但是,如果您在 .htaccess 中使用上述规则,那么最好添加

RewriteCond %{HTTPS} off

避免重定向循环。

此外,如果您想避免在 URL 中匹配给定模式 anywhere,包括 QUERY_STRING,则在您的条件中使用 THE_REQUEST 变量:

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !tab=availability [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NC,R]