首页 > 解决方案 > 将域重定向到子域 + 使其成为 https

问题描述

这有点奇怪:

我需要我的网站做两件事(其中一件已经在工作):

  1. 如果用户尝试通过 HTTP:// 访问域,则将其替换为 https:// - 这是用于 google 中的 SEO 并让用户感觉更安全 -

  2. 用于加载网站的站点文件夹需要是站点的子域文件夹

奇怪的是,第二部分正在工作,我想通了 - 但是我不确定如何合并这两个请求:

HTACCESS

RewriteEngine on
RewriteCond %{HTTP_HOST} ^trippy\.co\.nz$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.trippy\.co\.nz$
RewriteCond %{REQUEST_URI} !update.trippy.co.nz/
RewriteRule (.*) /update.trippy.co.nz/$1 [L]

但我不确定如何使网站显示为

https://trippy.co.nz/

我努力了:

RewriteEngine On
RewriteCond %{HTTP_HOST} update\.trippy\.co\.nz [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://update.trippy.co.nz/$1 [R,L]

但随后网址显示为:https ://update.trippy.co.nz

我需要保持https://trippy.co.nz/

这里的任何帮助都会非常好,我知道这是一个奇怪的情况。

谢谢,

沃利

标签: .htaccesssslhttpshostingweb-hosting

解决方案


...但随后网址显示为:https://update.trippy.co.nz

您似乎正在重定向到子域本身,而不是子域的子目录,正如您在第一条规则中所做的那样。您也可能以错误的顺序放置指令 - 外部重定向需要先进行 - 否则您将公开子域的子目录,这似乎不是意图。

请尝试以下操作:

RewriteEngine On

# Redirect HTTP to HTTPS
RewriteCond %{HTTP_HOST} ^(www\.)?trippy\.co\.nz [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]

# Rewrite all requests to the subdomain's subdirectory
RewriteCond %{HTTP_HOST} ^(www\.)?trippy\.co\.nz [NC]
RewriteRule !^update\.trippy\.co\.nz/ /update.trippy.co.nz%{REQUEST_URI} [L]

第二个规则块中不需要额外的条件,因为可以直接在 中执行检查RewriteRule并使用REQUEST_URI服务器变量而不是替换字符串中的$1反向引用。

R本身就是一个临时(302)重定向。R=301一旦您确认这工作正常,您可能希望将其更改为(永久)。


推荐阅读