子域到子文件夹 .htaccess 的重写规则

问题描述

我正在努力实现以下目标:

  1. 非 http 强制转换为 https - 有效
  2. www 强制非 www - 有效
  3. 从子文件夹 (/web) 加载的网站 - 作品
  4. test.example.com 加载不同的子文件夹 (/test) - 不起作用

4、不行,条件满足就去/web。无法理解如何将其更改为 /test

我使用的 .htaccess 代码

RewriteEngine On
RewriteCond %{HTTPS} !=on

RewriteCond %{HTTP_HOST} ^test.example.com$
RewriteRule ^(.*)$ /test/$1 [L,NC,QSA]

RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^example.com$ [NC,OR]
RewriteRule ^(.*)$ /example/web/$1 [L,QSA]

解决方法

对于您显示的示例,请尝试在此处遵循 htaccess 规则文件。在测试您的 URL 之前,请确保清除浏览器缓存。如果您有更多规则(除了显示的规则),请确保这些规则在这些规则之前。

RewriteEngine On
##Apply https to uris here..
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

##Apply non-www to uris here..
RewriteCond %{HTTP_HOST} ^(?:www\.)(example\.com)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [NE,R=301]

##Apply test to all uris here..
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test [NC]
RewriteRule ^(.*)/?$ example/web/$1 [L,NC,QSA]

##Apply test to all uris here..
RewriteCond %{HTTP_HOST} ^test\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/test [NC]
RewriteRule ^(.*)/?$ www.example.com/test/$1 [L,QSA]