使用单个 RewriteRule 将 Htaccess 重定向到 https 和 www

使用单个 RewriteRule 将 Htaccess 重定向到 https 和 www

我的文件中有以下内容.htaccess

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

它在浏览器中按预期工作,将所有流量重定向到https://www.example.com/

但是我正在使用一个可以自动将产品上传到网站的 POS 系统,显然这个桌面应用程序不喜欢多个RewriteRule。它抱怨它的网络商店没有安装。只要我删除其中一条规则,它就会很高兴。

所以我的问题是:有没有办法将其合并为一个RewriteRule

答案1

...不喜欢多个RewriteRule

这个要求很不寻常。它可能在抱怨多个重定向在请求时http://example.com,而不是字面上的指令数量RewriteRule

可以通过确保在第一个RewriteRule指令中重定向到规范 URL 来解决此问题。因此,不要:

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

你会写:

RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]

或者,为了保持这个“通用”,而不在中明确包含域名RewriteRule,请尝试以下操作:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

单身的RewriteRule

RewriteRule然后,您可以扩展上述内容,以便为 HTTPS 和 www 规范化创建一个。尝试以下操作:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)\.?$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

对于所有 HTTP 请求或者不启动www则重定向到规范 URL。第三个指令是从主机RewriteCond获取域(减去可选前缀)所必需的。是对最后匹配的反向引用www.%1条件模式即。。(.+)如果你只是在RewriteRule 代换那么您就不需要第三个条件了。

相关内容