.htaccess - 如何在某些页面上设置SSL(脚本需要修改)

时间:2011-08-26 14:34:51

标签: apache .htaccess ssl

我在整个网站上启用了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://

的任何想法

谢谢

1 个答案:

答案 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]
  1. 在任何其他重写规则(如果有的话)之前,这些规则需要放在网站根文件夹中的.htaccess中。如果放在其他地方,可能需要进行一些小的调整。

  2. 他们会

    • 强制/login.php/register.php
    • 的HTTPS
    • 对图像,CSS样式和JavaScript文件(具体而言,对于具有这些扩展名的文件)不执行任何操作
    • 并将强制HTTP用于所有其他网址
  3. 您可以轻松地将其他网址添加到该列表中 - 只需通过向列表中添加其他文件名来编辑现有规则(2个位置中的相同文本:1)以强制2)排除)

  4. 文件名区分大小写。因此,如果请求/LOGIN.php,这些规则将不起作用(Apache也不会提供服务,因为Linux是区分大小写的操作系统..所以这里不必担心太多。)

  5. 明显的事情:应该启用mod_rewrite并且.htaccess文件需要由Apache处理(一些网站托管公司因性能和安全原因而禁用它们)。