我有一套复杂的重写规则,我试图简化这些规则,但最后却陷入困境。我的目标如下:
到目前为止,我有2个htaccess文件,一个在我的web根目录中,另一个在我的webservice目录中。
我的root 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/$1 [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=$1¶ms=$2 [L,NC]
这正确地将基于网址的api参数重定向到/ webservice / rest中的正确文件(' api_client')。
这与我设法获得的最终解决方案非常接近。剩下的问题是指向网络服务的网址。网址不会重定向到www或https(我也不希望重定向'测试'以及指向/ webservice / rest文件夹的' dev'作为例外情况)
如何在保持我的最终webservice htaccess参数重定向的同时如何做到这一点?
答案 0 :(得分:2)
您需要在子目录的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=$1¶ms=$2 [L,NC]