0

在寻找上述问题的答案时,我遇到了这个脚本作为解决方案(我希望我的网站在 http 上,除了一些页面,如登录、注册、管理等):

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /

# force https for /login.php and /register.php
RewriteCond %{HTTPS} =off
RewriteRule ^(login|register)\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# don't do anything for images/css/js (leave protocol as is)
RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L]

# force http for all other URLs
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/(login|register)\.php$
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这个确切的示例应该可以在我的服务器上运行,但它只能部分运行,这意味着它将所有页面重定向到 http,但我无法打开 login.php 或 register.php。网络浏览器指出这些页面包含重定向循环并且它们无法显示。我绝不是 mode_rewrite 或 htaccess 方面的专家,因此我将不胜感激。

编辑:我已遵循建议并使用 chrome 插件运行 mywebsite。我发现在页面 login.php 中有重定向循环 http->https->http 等(该页面上唯一的其他重定向是当用户已经签名时,但它似乎不适合这个循环) . 我还尝试了设置 SSL 的不同代码,这个代码有效:

# Rewrite Rules for example.com
RewriteEngine On
RewriteBase /

# Turn SSL on for payments
RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/login\.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Turn SSL off everything but payments
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/login\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

而这个工作正常,但它只有一个 https 例外,我想拥有更多(大约 6 个)。有人知道为什么第一个脚本不起作用吗?或者如何修改第二个以获得更多的 https 网站?

谢谢

4

1 回答 1

1

我有类似的问题,这对我有用。

在您的 httpd.conf 中,在虚拟主机下,确保您同时拥有:

服务器名称 domain.com

服务器别名 www.domain.com

VirtualHost *:80 和 VirtualHost *:443 中的两者

于 2013-12-02T03:40:42.657 回答