多个htaccess重写子域名&例外

时间:2015-02-02 23:54:10

标签: php web-services .htaccess redirect apache2

我有一套复杂的重写规则,我试图简化这些规则,但最后却陷入困境。我的目标如下:

  1. 通过www将所有流量重定向到网站(子域名' test'和' dev'除外)
  2. 通过https重定向所有流量
  3. 使用url字符串作为参数,通过特定目录(' webservice')通过该目录中的文件重定向所有流量
  4. 到目前为止,我有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&params=$2 [L,NC]
    

    这正确地将基于网址的api参数重定向到/ webservice / rest中的正确文件(' api_client')。

    这与我设法获得的最终解决方案非常接近。剩下的问题是指向网络服务的网址。网址不会重定向到www或https(我也不希望重定向'测试'以及指向/ webservice / rest文件夹的' dev'作为例外情况)

    如何在保持我的最终webservice htaccess参数重定向的同时如何做到这一点?

1 个答案:

答案 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&params=$2 [L,NC]