我在整个网站上启用了ssl,但是我需要强制除 login.php 和 register.php 之外的所有页面到http://
所以基本上我只需要login.php和register.php页面为https:// protocol-ed。
现在我的脚本使 login.php 页面https://加密,但我不明白如何将 register.php 添加到此代码< / p>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# Turn SSL on for payments
RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/login\.php [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Turn SSL off everything but payments
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/login\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
有关如何编辑/制作此代码以将login.php和register.php页面设置为https://以及所有其他页面设置为http://
的任何想法谢谢
答案 0 :(得分:6)
如果您熟悉mod_rewrite和regex,那么阅读这些规则应该没有问题 - 提供解释特定规则的注释。其余的 - 正则表达式基础:
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]
在任何其他重写规则(如果有的话)之前,这些规则需要放在网站根文件夹中的.htaccess中。如果放在其他地方,可能需要进行一些小的调整。
他们会
/login.php
和/register.php
,您可以轻松地将其他网址添加到该列表中 - 只需通过向列表中添加其他文件名来编辑现有规则(2个位置中的相同文本:1)以强制2)排除)
文件名区分大小写。因此,如果请求/LOGIN.php
,这些规则将不起作用(Apache也不会提供服务,因为Linux是区分大小写的操作系统..所以这里不必担心太多。)
明显的事情:应该启用mod_rewrite并且.htaccess文件需要由Apache处理(一些网站托管公司因性能和安全原因而禁用它们)。