我已经检查了我可以在这里找到的所有相关问题(以及一般的谷歌),并尝试了所有不同的解决方案,但是还没有能够让它发挥作用。
我正在使用最近通过SSL的Wordpress网站。我已将其设置为通过调整管理区域中的“设置”页面将所有页面强制为https,将相应的行添加到wp-config文件以强制管理端为https并将我的htaccess文件修改为以下内容:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/branding/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule ^branding/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
这就是我想要做的事情......
1)http://www.example.com/
(以及除品牌外的所有子页面)被重定向到https://example.com
2)http://example.com/branding
保持原样
3)https://example.com/branding
被重定向到http://example.com/branding
上面的htaccess代码可以强制http:到https:,但是,如果我输入http://example.com/branding
或https://example.com/branding
,我会被重定向到https://example.com
。
我已经使用了初始重写代码的多种变体并将其放置在不同的地方(如此处对类似问题的各种其他答案中所指示的那样),而不会对结果进行任何更改。
如果有人能告诉我我的错误在哪里以及如何解决,我们将非常感激。
答案 0 :(得分:0)
试试这个:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/branding/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteRule ^branding(.*) http://%{HTTP_HOST}/branding$1 [R=301,L]
答案 1 :(得分:0)
在同事的帮助下,我们得到了解决方案。这是更新后的代码...
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/branding/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/branding/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
htaccess文件中特定于WP的规则会导致一些奇怪的情况发生。主要的一个是从/ branding /到/index.php进行内部重写,然后WP在PHP中处理请求。文件检查将处理检查以确保index.php文件存在。 WP将在内部处理重定向不具有斜杠的有效页面请求。
答案 2 :(得分:0)
一直在搜索这几个小时...如果您需要将多个页面重定向到https的http,可以进行调整。
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/page1|page2|page3/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/page1|page2|page3/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]