Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
.htaccess 将网页的子集强制为HTTPS_.htaccess_Mod Rewrite_Https - Fatal编程技术网

.htaccess 将网页的子集强制为HTTPS

.htaccess 将网页的子集强制为HTTPS,.htaccess,mod-rewrite,https,.htaccess,Mod Rewrite,Https,我想强制网页的一个子集以https和所有其他网页作为http。 在htaccess中,我使用了我在另一篇文章中找到的以下脚本,但它不起作用 RewriteCond %{HTTPS} off RewriteRule ^(login|signup)\.php https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA] RewriteCond %{HTTPS} on RewriteCond ${REQUEST_URI} !(login|signup)\.php Rewr

我想强制网页的一个子集以https和所有其他网页作为http。 在htaccess中,我使用了我在另一篇文章中找到的以下脚本,但它不起作用

RewriteCond %{HTTPS} off
RewriteRule ^(login|signup)\.php https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]

RewriteCond %{HTTPS} on
RewriteCond ${REQUEST_URI} !(login|signup)\.php
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]
HTTP是强制的,HTTPS是强制的,但eg在我的浏览器中产生了无限循环错误。你知道哪里出了问题吗

我将代码改为下面的代码,这似乎是可行的,但现在由于网页上的安全和不安全项目,SSL仅部分实现。我检查了图片、样式表和外部javascript文件的URL,这些都是相对的,不应该造成问题。。。如果有人知道如何处理这件事,我很高兴听到

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login$ [OR]
RewriteCond %{REQUEST_URI} ^/signup$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !login$
RewriteCond %{REQUEST_URI} !signup$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}  [R,L]
  • 尝试将此行添加到.htaccess的顶部:

    Options+FollowSymLinks-多视图

  • 也许您还有其他一些规则可以执行此重定向——如果您提供.htaccess文件的全部内容,这将是一件好事

  • 在实际的php脚本中可能有重定向


  • 在任何acse中——如果您可以编辑Apache的配置文件(httpd.conf或httpd vhost.conf),那么您可以启用重写调试(
    RewriteLoglevel 9
    )并查看到底发生了什么——这是最好的选择(如果可以)。

    感谢您的帮助。添加-多视图不会更改错误,没有其他重定向规则,我完全清理了htaccess文件以进行调试。我没有访问配置文件的权限,但我会询问我的主机。@DigitalMD如果它是共享主机,那么我怀疑他们会为您这样做(不太可能),因为这需要重新启动Apache+,这样的日志增长非常快。。而且我不确定它是否可以仅为1个特定域启用…无需强制HTTP用于非登录/注册页面(顺便说一句,帐户页面(如果您有)如何-它们是否将通过HTTP提供服务。相反,首先在您的代码中生成正确的URL(即代替
    执行
    ),这样客户将始终转到HTTP,而无需mod_rewrite的帮助。如果客户希望通过HTTPS访问主页或任何其他页面。。那就让他吧,这没什么错。只要您拥有所有带有正确URL的链接,除非客户有意更改URL,否则这种情况永远不会发生。通过不强制使用HTTP,您就不会对安全页面上的不安全内容(CSS/JS/Images)产生问题。这就是我一直编写网站代码的方式。是的--更改所有链接以在现有页面中包含域名和协议需要做大量工作。。。但是对于新页面/新项目,这没有什么区别(没有额外的开销)。是--您应该能够通过mod_rewrite(添加一个或两个以上的条件)修复它。。但这不是正确的方式(至少在我看来)。谢谢你的帮助。我现在使用mod_rewrite在那些需要安全连接的页面上强制使用https。我删除了强制http的部分,因为这也强制将安全页面上的引用(例如js/css/image文件)重定向到http(这些文件在重写时未验证),并导致在同一页面上存在安全和非安全项的问题。将所有内容正确地引用到http或https(对于后者,在用户更改url的情况下强制使用https),并按照您的建议使用完整的url,所有内容现在都可以正常工作了。非常感谢。