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

Ilj*_*lja 4 apache .htaccess ssl

我在整个网站上都启用了ssl,但我需要强制除login.phpregister.php之外的所有页面到http://

所以基本上我只需要login.php和register.php页面为https:// protocol-ed.

现在我的脚本使login.php页面https://加密,但我不明白如何将register.php添加到此代码

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]
Run Code Online (Sandbox Code Playgroud)

关于如何编辑/制作此代码以将login.php和register.php页面设置为https://以及所有其他页面为http://的任何想法

谢谢

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

  2. 他们会的

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

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

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