我的文件中有以下内容.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
代换那么您就不需要第三个条件了。