我已经有了这段代码来强制使用这些网址:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/my/?.*$
RewriteCond %{REQUEST_URI} !^/my/basket/add?.*$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login/?.*$
RewriteCond %{REQUEST_URI} ^/logout/?.*$
RewriteCond %{REQUEST_URI} ^/register/?.*$
RewriteCond %{REQUEST_URI} ^/newsletter/?.*$
RewriteCond %{REQUEST_URI} ^/reset-password/?.*$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
这非常有效,但我想做的是强制不符合上述条件的任何网址到HTTP,触发301。
我不想创建HTTP
页面列表,并像上面的HTTPS
一样重定向它们。除非我以某种方式更改系统,否则安全页面URL将始终保持不变,但我可以在需要时更新它们。非安全页面可以通过动态创建/编辑,由一些销售团队创建/编辑,因此需要智能地定位。
有关如何做到这一点的任何想法? 要使用.htaccess
来完成,我已经通过在PHP框架中处理它来实现这一点,但这导致了一个非常重要的性能问题,并导致我们的Google抓取问题
干杯!
答案 0 :(得分:4)
Seidr对答案的修改,因为实际上你只想在HTTPS打开时重定向,当你想要它关闭时(也就是说,没有%{HTTP}变量)。再次,在你的所有规则之后加上这个。
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/login/?.*$
RewriteCond %{REQUEST_URI} !^/logout/?.*$
RewriteCond %{REQUEST_URI} !^/register/?.*$
RewriteCond %{REQUEST_URI} !^/newsletter/?.*$
RewriteCond %{REQUEST_URI} !^/reset-password/?.*$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
虽然没有测试过,但不是100%它会起作用。
编辑:需要安全页面的条件,以便它们仍然处于HTTPS模式。
答案 1 :(得分:1)
当您在规则中使用L标志时,您应该能够使用RewriteCond(例如下面的那个)来重写以前在HTTP中没有捕获的任何请求吗?按照您发布的规则放置它。这似乎有点太明显了,但它可能会奏效。
RewriteCond %{REQUEST_URI} ^.*$
RewriteCond %{HTTP} OFF
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]