使用子域和异常重写多个 htaccess
Multiple htaccess rewrites with subdomains & execptions
我有一套复杂的重写规则,我正试图对其进行简化,但一直陷入困境。我的目标如下:
- 通过 www 将所有流量重定向到网站(子域 'test' 和 'dev' 除外)
- 通过 https 重定向所有流量
- 通过特定目录 ('webservice') 中的文件重定向所有流量,使用 url 字符串作为参数
到目前为止我有 2 个 htaccess 文件,一个在我的 web 根目录中,另一个在我的 webservice 目录中。
我的根 htaccess 如下所示:
RewriteEngine on
# Ensure www on all URLs.
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
RewriteRule ^(.*)$ https://www.example.com/ [L,R=301]
# Ensure we are using HTTPS version of the site.
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
#RewriteCond %{REQUEST_URI} !^/?(webservice)/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
到目前为止,这一切正常,并通过 www 和 https 正确重定向了我的大部分流量。
我的第二个 htaccess 文件在 /webservice/rest 中看起来像这样:
RewriteEngine On
RewriteBase /webservice/rest
RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ api_client.php?method=¶ms= [L,NC]
这会将我基于 url 的 api 参数正确重定向到 /webservice/rest ('api_client') 中的正确文件。
这接近于我设法获得的最终解决方案。剩下的问题是指向 'webservice' url 的 urls 没有重定向到 www 或 https(我也希望不重定向 'test' 和 'dev' 指向 /webservice/rest 文件夹的子域作为例外)
有什么想法可以在维护我最终的 web 服务 htaccess 参数重定向的同时做到这一点吗?
您需要在子目录的 htaccess 文件中包含相同的 www/https 重定向,因为它会取代父目录中的规则。
RewriteEngine On
RewriteBase /webservice/rest
# Ensure www on all URLs.
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ api_client.php?method=¶ms= [L,NC]
我有一套复杂的重写规则,我正试图对其进行简化,但一直陷入困境。我的目标如下:
- 通过 www 将所有流量重定向到网站(子域 'test' 和 'dev' 除外)
- 通过 https 重定向所有流量
- 通过特定目录 ('webservice') 中的文件重定向所有流量,使用 url 字符串作为参数
到目前为止我有 2 个 htaccess 文件,一个在我的 web 根目录中,另一个在我的 webservice 目录中。
我的根 htaccess 如下所示:
RewriteEngine on
# Ensure www on all URLs.
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
RewriteRule ^(.*)$ https://www.example.com/ [L,R=301]
# Ensure we are using HTTPS version of the site.
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
#RewriteCond %{REQUEST_URI} !^/?(webservice)/
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
到目前为止,这一切正常,并通过 www 和 https 正确重定向了我的大部分流量。
我的第二个 htaccess 文件在 /webservice/rest 中看起来像这样:
RewriteEngine On
RewriteBase /webservice/rest
RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ api_client.php?method=¶ms= [L,NC]
这会将我基于 url 的 api 参数正确重定向到 /webservice/rest ('api_client') 中的正确文件。
这接近于我设法获得的最终解决方案。剩下的问题是指向 'webservice' url 的 urls 没有重定向到 www 或 https(我也希望不重定向 'test' 和 'dev' 指向 /webservice/rest 文件夹的子域作为例外)
有什么想法可以在维护我最终的 web 服务 htaccess 参数重定向的同时做到这一点吗?
您需要在子目录的 htaccess 文件中包含相同的 www/https 重定向,因为它会取代父目录中的规则。
RewriteEngine On
RewriteBase /webservice/rest
# Ensure www on all URLs.
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{HTTP_HOST} !^(dev|test)\. [NC]
RewriteRule ^(.*)$ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ api_client.php?method=¶ms= [L,NC]