2012-03-07 2 views
2

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

Я нашел это:

.htaccess between developemt, staging, and production

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

ответ

3

Если ваши сервера работают под управлением 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 сервера, если вы используете <if>, не забудьте проверить версию Apache, прежде чем пытаться это.

1

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

No. К сожалению.

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

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

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

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

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

+0

Отлично, спасибо за идеи и разъяснения! – user

+0

@ user1162541, Да A2.4 имеет директиву , которая является более аккуратным подходом, но будьте осторожны, что некоторые провайдеры хостинга уже приняли A2.4, поскольку у нее все еще есть проблемы с производительностью и стабильностью. – TerryE

3

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

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

ServerAdmin [email protected] 
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> 
Смежные вопросы