我有我的.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]
它在浏览器中按预期工作,将所有stream量redirect到https://www.example.com/ 。
但我使用的POS系统自动将产品上传到网站,显然这个桌面应用程序不喜欢多个RewriteRule 。 它抱怨说,它的networking商店没有安装。 只要我删除了其中的一条规则,就很高兴。
所以我的问题是:有没有办法将它合并成一个RewriteRule ?
…不喜欢多个
RewriteRule。
这个要求是不寻常的。 在请求http://example.com ,可能会抱怨多重redirect ,而不是字面意义上的RewriteRule指令的数量?
这可以通过确保您redirect到第一个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 然后,您可以扩展以上内容,为HTTPS和www规范化创build一个RewriteRule 。 尝试以下操作:
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然后redirect到规范的URL。 第三个RewriteCond指令需要从主机获取域(less一个可选的www.前缀)。 %1是对最后匹配的CondPattern的反向引用,即。 (.+) 。 如果你只是在RewriteRule replace中硬编码规范主机名,那么你就不需要这个第三个条件。