【问题标题】:.htaccess - How to set SSL on certain pages (Script need's modifying).htaccess - 如何在某些页面上设置 SSL(脚本需要修改)
【发布时间】:2011-11-04 14:21:12
【问题描述】:

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

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

的任何想法

谢谢

【问题讨论】:

  • 你为什么要想要禁止SSL? (另外,login.php 似乎是一个用于“付款”的非正统 URL)。
  • 1) 你的方法是错误的(整个想法); 2)即使您在这里实现了您的要求(或其他人为您执行此操作),您很可能会在安全页面上提供图像/css/js 时遇到问题(浏览器警告)——因为您的整个方法存在缺陷; 3)你第三次问几乎同样的问题:stackoverflow.com/questions/7189484/…stackoverflow.com/questions/7202472/…
  • @LazyOne 是的,我猜我提出了 3 个问题,我的方法有什么问题?我的意思是它现在是我希望它在 login.php 页面上的工作方式,我唯一需要的是添加 register.php 页面,因此两者都是 https:// 并且网站的其余部分保持 http:// (用于加载时间,并且外部链接原因)
  • 1) 那么帐户页面呢——它们不会受到保护..但它们通常包含私人信息(地址、出生日期等——我不知道你的网站是做什么的,所以不能推测这一点)。为什么如此重要的页面(如果存在)不应该受到 HTTPS 的保护?
  • 2) 假设您在/login.php 页面上——按照您当前的逻辑,所有图像/css/js 都应通过不安全的 HTTP 提供。如果你想保护页面,那么这个页面上的所有内容也应该受到保护,否则它很容易受到中间人类型的攻击(有人拦截你的 css/js 并在下载这些时注入错误代码用户页面 - 用户不会注意到任何东西)。此外,某些浏览器(例如 Internet Explorer)会显示警告,而另一些浏览器会阻止在安全页面上显示非安全内容。

标签: apache .htaccess ssl


【解决方案1】:

如果您对 mod_rewrite 和 regex 有点熟悉,那么阅读这些规则应该不会有问题——cmets 会解释特定规则的作用。其余的——正则表达式基础:

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 文件(准确地说,对于具有这些扩展名的文件)不执行任何操作
    • 并将强制所有其他 URL 使用 HTTP
  3. 您可以轻松地将其他 URL 添加到该列表 - 只需通过在列表中添加其他文件名来编辑现有规则(2 处相同的文本:1)强制 2)排除)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多