linux CDN交付网站的Http和www重定向的Htaccess配置?

jq6vz3qz  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(103)

问-我正在寻找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提供服务时,重定向甚至可以工作,我是否错过了任何需要考虑的问题。

这将是一个很大的帮助,如果它得到修复。

t5fffqht

t5fffqht1#

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

字符串
根据我最初链接到的the answer/question,您可能需要检查X-Forwarded-Proto头,而不是HTTPS服务器变量,因为CDN的行为就像一个代理,您的应用程序服务器通过纯HTTP连接。
X-Forwarded-Proto头(defacto-standard)由代理设置,通知后端应用程序服务器用户连接的协议。
所以,你可以使用下面的代码来代替上面的代码:

# Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


您需要在测试之前清除所有缓存(301缓存是持久性的),并首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。
您现有的非www到www的重定向(如下)是“OK”,尽管不需要捕获URL路径,因为它没有在 substitition 字符串中使用(您使用的是REQUEST_URI服务器变量)。

  • 旁白:*
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)


这个条件并不像写的那样正确(它基本上什么也不做)。双反斜杠匹配一个文本反斜杠,所以这个 negated 条件总是成功的。这些应该是单反斜杠转义,转义文本点。举例来说:

RewriteCond $1 !^(index\.php|resources|robots\.txt)

nqwrtyyt

nqwrtyyt2#

非常感谢您的检查和回答。根据你的建议,我已经来到下面的代码。它仍然是给太多的重定向问题,你能请检查一次。

<IfModule mod_rewrite.c>
  Options -Indexes

  RewriteEngine On
  RewriteBase /
  
 # Redirect HTTP to HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R=302,L]
  
  RewriteCond $1 !^(index\.php|resources|robots\.txt)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.+)$ index.php?/$1 [L,QSA]
</IfModule>

字符串
希望我们不必对AWS Cloudfront进行任何特定更改。我已经尝试清除现有的缓存,并尝试重新启动Apache源服务器。

相关问题