Как мне написать условный блок if - elseif - elseif в файле .htaccess? - PullRequest
3 голосов
/ 19 октября 2011

Вот что я хочу сделать в псевдокоде:

if server.host equals 'productionsite.com' then
  RewriteBase /
else if server.host equals 'stagingsite.com' then
  RewriteBase /staging/mysite
else if server.host equals 'localhost' or server.host equals '127.0.0.1' then
  Rewrite /dev/mysite

Тем не менее, это то, что у меня на самом деле пока, что, кажется, не работает, как я ожидаю:

RewriteCond %{HTTP_HOST} =productionsite.com
RewriteBase /

RewriteCond %{HTTP_HOST} =stagingsite.com
RewriteBase /staging/mysite

RewriteCond %{HTTP_HOST} =localhost
RewriteBase /dev/mysite

Я ценю любую помощь, которую могу получить заранее.

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Не сам по себе ответ (начинающийся как комментарий), но может вам немного помочь:

Ваш подход не работает, поскольку директивы RewriteCond не влияют на RewriteBase.За RewriteCond может следовать только другой RewriteCond или RewriteRule.RewriteBase - совершенно другой зверь: я не думаю, что условная RewriteBase возможна;У меня есть смутное ощущение, что он обрабатывается при запуске, поэтому не может быть изменен динамически (но я могу быть очень неправ в этом).У Google есть несколько попаданий для «условной базы перезаписи», вы можете просматривать их, но они кажутся в значительной степени отрицательными.

Игра с IfDefine для достижения аналогичного эффекта будет стоить выстрела.

В качестве альтернативы, вы можете попробовать сделать это с RewriteRules и переменными среды:

 RewriteBase /

 RewriteCond %{HTTP_HOST} =stagingsite.com
 RewriteRule ^ - [E=FRB:/staging/mysite]

 RewriteCond %{HTTP_HOST} =localhost
 RewriteRule ^ - [E=FRB:/dev/mysite]

, а затем добавить каждый путь перезаписи с переменной среды FRB, например

 RewriteRule ^home$ %{ENV:FRB}/index.php

Но это всего лишь непроверенная теория.

0 голосов
/ 23 февраля 2016

Для меня сработало решение от https://snipt.net/beat/htaccess-different-bases-subfolders-in-developmentproduction/

RewriteCond %{HTTP_HOST} !^localhost$
RewriteRule . - [E=REWRITEBASE:/prod/]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule . - [E=REWRITEBASE:/dev/]
...