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