Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess-如何在某些页面上设置SSL(脚本需要修改)_Apache_.htaccess_Ssl - Fatal编程技术网

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

Apache .htaccess-如何在某些页面上设置SSL(脚本需要修改),apache,.htaccess,ssl,Apache,.htaccess,Ssl,我在整个网站上启用了ssl,但我需要强制所有页面(除了login.php和register.php到http:// 所以基本上我只需要login.php和register.php页面就可以使用https://protocol-ed 现在,我有一个脚本,可以使login.php页面https://加密,但我不知道如何将register.php添加到此代码中 Options +FollowSymLinks RewriteEngine On RewriteBase / # Turn SSL on

我在整个网站上启用了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]
关于如何edi/使此代码将login.php和register.php页面设置为https://并将所有其他页面设置为http://的任何想法://


谢谢

如果您对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
      强制使用HTTPS
    • 对图像、css样式和JavaScript文件不做任何操作(确切地说,对于具有这些扩展名的文件)
    • 并将强制所有其他URL使用HTTP
  • 您可以轻松地将其他URL添加到该列表中——只需通过向列表中添加其他文件名(两处相同的文本:1)来编辑现有规则,以强制2)排除

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

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


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