2015-02-02 2 views
1

У меня есть сложный набор правил перезаписи, которые я пытаюсь упростить, но продолжаю кончаться в углу. Мои цели заключаются в следующем:Несколько htaccess перезаписывает с субдоменами и исключениями

  1. Перенаправление весь трафик на сайт через WWW (кроме субдоменов «тест» и «Dev»)
  2. Перенаправление весь трафик через HTTPS
  3. Перенаправление весь трафик через определенный каталог (» webservice ') через файл в этом каталоге, используя строки url в качестве параметров

До сих пор у меня есть 2 файла htaccess, один в моем корневом каталоге, а другой в моем каталоге 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/$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/отдыха:

RewriteEngine On 
RewriteBase /webservice/rest 
RewriteRule ^([\w-]+)/?(\?([\w-=?&]))?$ api_client.php?method=$1&params=$2 [L,NC] 

Это правильно перенаправляет мои параметры API на основе URL-адрес в правильный файл в/WebService/отдыха ('api_client').

Это как можно ближе к окончательному решению, которое мне удалось получить. Оставшаяся проблема заключается в том, что URL-адреса, которые направлены на URL-адрес «webservice», не перенаправляются на www или https (я также не хочу перенаправлять поддиаграммы «test» и «dev», которые указывают на папку/webservice/rest в качестве исключений)

Любые идеи, как это сделать, сохраняя мой последний параметр перенаправления htaccess веб-сервиса?

ответ

2

Вам необходимо включить те же переадресации www/https в файл htaccess подкаталога, поскольку он отменяет правила в родительском каталоге.

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] 
+0

Thanks Jon - это ближе, но не совсем там. Если я сделаю это изменение, мне придется раскомментировать эту строку в моем первом блоке кода - «RewriteCond% {REQUEST_URI}!^/? (Webservice) /", и все это СБРОСНО свисает вместе, за исключением случаев, когда я запрашиваю API, начинающийся с простого примера. com (а не www) мое последнее правило перезаписи не правильно выполняет параметры - конечный продукт выглядит как https://www.example.com/webservice/rest/api_client.php?method=exampleMethod¶ms= – contool

+0

Также - мне нужно раскомментируйте эту строку в моем первом блоке кода, иначе я получаю перенаправление на 404 – contool

+0

Поцарапайте, что Джон - это сработало для меня, должно быть, всего лишь несколько минут, чтобы полностью протаиться. Для всех, кто наткнулся на это, мне нужно было исключить мой подкаталог, используя RewriteCond% {REQUEST_URI}!^/? (Webservice)/для этого, чтобы работать, а также добавить все мои riles во второй файл htaccess - возможно, кто-то еще может пролить свет на то, почему – contool

Смежные вопросы