.htaccess 我想将我所有网站流量重定向到“https://www.example.com/index.html“

d4so4syb  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(148)

如果有人访问我的网站,比如:

  • example.com
  • www.example.com
  • http://example.com
  • http://www.example.com
  • https://example.com
  • https://www.example.com

我想把它重定向到https://www.example.com/index.html。我尝试了下面的代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.mywebsite.com/index.html$1 [R=301,L,NE]

上面的代码工作正常,但是,如果访问者类型https://www.example.com它不会重定向到https://www.example.com/index.html,也如果访问者使用谷歌浏览器和类型www.example.com它也不会重定向到https://www.example.com/index.html

wlp8pajw

wlp8pajw1#

请尝试以下方法:

RewriteEngine On

# Redirect "/" to "/index.html" (HTTPS + www)
RewriteRule ^$ https://www.example.com/index.html [R=301,L]

# Redirect non-www to www (+HTTPS)
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Redirect HTTP to HTTPS (any remaining URLs)
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

只有第一条规则满足您的问题中列出的要求。所有指定的URL都被重定向到https://www.example.com/index.html(HTTPS + www)。
第二个和第三个规则只是通用的规范(www + HTTPS)重定向,用于其他任何内容,包括用户是否请求/index.html
首先使用302(临时)重定向进行测试,以避免潜在的缓存问题。在测试之前,您需要清除浏览器缓存。
看看你的规矩......

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/index.html$1 [R=301,L,NE]

第一个规则重定向到HTTP,而不是HTTPS,后者是预定目标。
第二个规则将 * 所有内容 *(包括任何静态资产)重定向到/index.html,并在末尾附加所请求的URL(使用$1反向引用)。例如,对http://example.com/foo的请求将被重定向到https://www.example.com/index.htmlfoo(分两次重定向)。

更新日期:

每次我在localhost环境中工作时,localhost都会受到HTTPS重定向的影响。...我在htaccess文件中没有其他规则,只有这个重定向规则。是的,可以在localhost上关闭所有这些规则。我的本地dev环境中的主机名是“localhost”。
要在 localhost 上禁用所有这些规则,您可以首先在RewriteEngine指令之后添加以下规则。

# Prevent further processing on localhost
RewriteCond %{HTTP_HOST} =localhost
RewriteRule ^ - [L]

上述声明......对于每个URL请求,其中Host头完全等于localhost,则不执行 * 替换 *(由连字符-表示),并且Llast)标志防止处理以下规则。

相关问题