Отдельный файл htaccess с различием между производством и разработкой - PullRequest
2 голосов
/ 07 марта 2012

В настоящее время я использую два файла .htaccess для своего веб-сайта: один - версия для разработки, а другой - версия для работы. Разница заключается в абсолютном и некоторых относительных путях, которые используются для директив RedirectMatch, RewriteRule и ErrorDocument, и которые различаются между разработкой и производством. Я использую ловушку git для удаления версии dev и переименования рабочей версии, но это все еще означает, что мне нужно поддерживать две версии одного и того же файла. Кроме того, я сталкиваюсь с подобными проблемами с другими сайтами, которыми я управляю, так что все это означает больше работы. У меня есть один файл и какое-то условие в файле .htaccess, которое позволяет мне сказать if production -> use these, else -> use these. Могу ли я сделать такую ​​вещь в файле .htaccess?

Я нашел это:

.htaccess между разработчиками, подготовкой и производством

Но это для правил перезаписи и не будет исправлять различные пути ErrorDocument.

Ответы [ 3 ]

4 голосов
/ 28 марта 2012

Если на ваших серверах работает Apache 2.3 или выше, вы можете использовать директиву <if expr>, например:

<if "%{HTTP_HOST} == 'dev.example.com'">
    # dev directives
</if>
<if "%{HTTP_HOST} == 'www.example.com'">
    # prod directives
</if>

В более ранних версиях Apache выдается ошибка 500 Server, если вы используете <if>,обязательно проверьте версию Apache, прежде чем пытаться это сделать.

3 голосов
/ 10 сентября 2012

Я столкнулся с проблемой, когда мне нужно было подобное решение, но я не мог использовать директиву <if expr>, потому что я запускал Apache 2.2

Альтернативой является установка инструкции защиты паролем в вашей конфигурации apache (vhost-conf в моем случае) файл внутри тега, как показано ниже.Обратите внимание, что вам все еще нужен файл .hpasswd

ServerAdmin xxx@lami.me
DocumentRoot "/doc/root/html"

ServerName dev.lami.me
ServerAlias dev.lami.me localhost

ErrorLog "/doc/root/logs/error_log"
CustomLog "/doc/root/logs/access_log" common

<Directory "/doc/root/html">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all

    AuthName "Restricted Area" 
    AuthType Basic 
    AuthUserFile /doc/root/.htpasswd 
    AuthGroupFile /dev/null 
    require valid-user
</Directory>
1 голос
/ 08 марта 2012

У меня есть один файл и какое-то условие в файле .htaccess, которое позволяет мне сказать, если производство -> использовать это, иначе -> использовать это. Могу ли я сделать такую ​​вещь в файле .htaccess?

Нет. К сожалению.

Однако вы можете создать свой .htaccess для работы с обоими с небольшой осторожностью. И я сделал это для моих систем тестирования и тестирования.

IMO, самый простой способ сделать это - заставить ваш сайт разработки отражать ваш рабочий сайт в некоторых ключевых аспектах, и это то, что я делаю. Например, если ваш домен prod - mydomain.com, а ваша тестовая среда - localhost, добавьте псевдоним mydomain.home для localhost в ваш файл etc / hosts. Теперь вы можете добавить vhost для mydomain.home и отразить в нем корни документа и настройки среды prod. Если вам нужно обратиться к HTTP_HOST, теперь вы можете использовать mydomain. (Com | home) и использовать% 1, чтобы определить, какие именно.

Это предполагает, что вы запускаете dev env в системе LAMP. Если нет, то довольно легко настроить виртуальную машину для этого (как я опишу здесь )

Вы можете использовать RewriteRules вместо директив RedirectMatch, а с Rewriterules вы можете использовать флаги [C], [OR], [E] и [S] для реализации релейной логики в стиле ветви, которая может эффективно отражать if / then / остальное конструирует.

Основная проблема - настройка DocumentRoot, если вы работаете в среде с общим хостингом и влияет на локальные пути ErrorDocument, но, не зная вашей среды, сложно дать больше подробностей

...