apache htaccess 不会将 https://www 添加到除 inside.php 之外的任何页面

Posted

技术标签:

【中文标题】apache htaccess 不会将 https://www 添加到除 inside.php 之外的任何页面【英文标题】:apache htaccess doesnt add https://www to any page except inside.php 【发布时间】:2017-09-30 02:14:54 【问题描述】:

我们有一个客户的网站,目前在我们的开发服务器上。我们在格式化 .htaccess 文件时遇到了一些问题。目前,htaccess 文件仅在inside.php 上导致重定向到https://www.。我们的目标是让每个页面都重定向到使用https://www.。我们目前在我们的 header.php 文件中使用基本 url 设置,该文件包含在每个页面上。不确定是否有更好的方法来完成我们正在尝试做的事情,但如果有任何帮助将不胜感激。

这是我们的 .htaccess 文件的当前内容。

RewriteEngine on

#enables you to access PHP files with html extension
AddType application/x-httpd-ea-php70 .html .htm

RewriteCond %REQUEST_FILENAME -f [OR]
RewriteCond %REQUEST_FILENAME -d [OR]
RewriteCond %REQUEST_FILENAME -l
RewriteRule ^ - [L]

#forces https://
RewriteCond %HTTPS off
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]

#forces www
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule .* https://www.%HTTP_HOST%REQUEST_URI [L,R=301]


RewriteRule ^physicians(/((([a-zA-Z0-9_-]+)/?)*))?$    physicians.php?link=$2    [NC,L]

RewriteRule ^((([a-zA-Z0-9_-]+)/?)*)$ inside.php?page=$1


ErrorDocument 404 /inside.php

【问题讨论】:

谁想到了“括号越多越好”? 重定向到 https 和 www 应该交换。 由于这是一个新页面,我们可以假设您使用的是当前的 http 服务器版本。这意味着您应该更喜欢 END 标志而不是 L 标志。 如果这是开发服务器上的一个页面,并且是您为付费客户开发的页面,那么我希望您能够控制 http 服务器配置。在那种情况下:为什么要使用动态配置文件而不是真正的服务器配置?众所周知,这些文件容易出错,难以调试,而且它们会毫无意义地减慢服务器速度。 如果请求针对物理文件系统中的现有文件、文件夹或链接,您可以阻止任何重写。这样就不能应用重定向到 https 和 www。您必须交换规则组的顺序。 【参考方案1】:

当请求一个真实的文件、目录或符号链接时,你提前退出

RewriteRule ^ - [L]

只有在此规则之后,请求才会被重定向到https://www.。要将所有请求重定向到https://www.,请将规则移到开头,例如

#forces www
RewriteCond %HTTP_HOST !^www\. [NC]
RewriteRule .* https://www.%HTTP_HOST%REQUEST_URI [L,R]

#forces https://
RewriteCond %HTTPS off
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R]

# all other rules come here
# ...

我还将非 www 部分移到了前面,否则如果原始请求是针对 http://example.com 的,那么您有两个重定向。

从不R=301测试!

【讨论】:

好答案奥拉夫,+1

以上是关于apache htaccess 不会将 https://www 添加到除 inside.php 之外的任何页面的主要内容,如果未能解决你的问题,请参考以下文章

在请求用户身份验证之前,Apache .htaccess重定向到HTTPS

apache_conf Htaccess https

Apache环境修改.htaccess文件实现子目录强制HTTPS访问

apache_conf HTTPS重写.htaccess

apache_conf .htaccess强制https

apache_conf Https重定向.htaccess