问-我正在寻找https和www重定向!
我最近配置了我的laravel网站在CDN上工作,在用下面的htaccess代码实现CDN之前,一切都工作得很好。
<IfModule mod_rewrite.c>
Options -Indexes
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L,QSA]
</IfModule>
字符串
然而,后实施CDN它抛出错误-太多的重定向,所以我一直像下面这样现在,至少网站是工作。
<IfModule mod_rewrite.c>
Options -Indexes
RewriteEngine On
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L,QSA]
</IfModule>
型
**AWS CLoudfront:**来源网站-example(.com)(https)||CNAME别名- www.example(.com)(https)||行为:http到https
你能建议我用我的htaccess规则做什么吗?我需要至少低于规则,否则它会破坏我的laravel网站功能。
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?/$1 [L,QSA]
型
请建议一个规则来添加https和www重定向,这应该与上述行。
**也是一个一般性的问题:**从CDN提供服务时,重定向甚至可以工作,我是否错过了任何需要考虑的问题。
这将是一个很大的帮助,如果它得到修复。
2条答案
按热度按时间t5fffqht1#
字符串
根据我最初链接到的the answer/question,您可能需要检查
X-Forwarded-Proto
头,而不是HTTPS
服务器变量,因为CDN的行为就像一个代理,您的应用程序服务器通过纯HTTP连接。X-Forwarded-Proto
头(defacto-standard)由代理设置,通知后端应用程序服务器用户连接的协议。所以,你可以使用下面的代码来代替上面的代码:
型
您需要在测试之前清除所有缓存(301缓存是持久性的),并首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
您现有的非www到www的重定向(如下)是“OK”,尽管不需要捕获URL路径,因为它没有在 substitition 字符串中使用(您使用的是
REQUEST_URI
服务器变量)。型
这个条件并不像写的那样正确(它基本上什么也不做)。双反斜杠匹配一个文本反斜杠,所以这个 negated 条件总是成功的。这些应该是单反斜杠转义,转义文本点。举例来说:
型
nqwrtyyt2#
非常感谢您的检查和回答。根据你的建议,我已经来到下面的代码。它仍然是给太多的重定向问题,你能请检查一次。
字符串
希望我们不必对AWS Cloudfront进行任何特定更改。我已经尝试清除现有的缓存,并尝试重新启动Apache源服务器。