.htaccess между developmt, постановкой и производством - PullRequest
14 голосов
/ 20 июля 2011

Я работаю над приложением, которое использует переписывание URL и имеет особую конфигурацию .htaccess. При работе над приложением у меня есть три уклонения:

  1. Разработчик на моей локальной машине (localhost)
  2. Постановка (staging.mydomain.com)
  3. Производство (www.mydomain.com)

Я постоянно выдвигаю новые обновления в промежуточную и производственную среду, и каждый раз, когда я перезаписываю существующий исходный код, мне приходится вносить изменения в файл .htaccess. Есть ли способ, которым я могу использовать .htaccess для каталога или он автоматически обнаруживает свою среду?

Мой текущий файл .htaccess находится ниже. Я просто откомментирую разделы между различными средами, но хотел бы прекратить это делать ...

# Development

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA]

# Staging

# RewriteEngine on
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_URI} !=/favicon.ico
# RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA]

# Production

# RewriteEngine on
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteCond %{REQUEST_URI} !=/favicon.ico
# RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA]

Заранее спасибо!

Чак

Ответы [ 4 ]

16 голосов
/ 20 июля 2011
# Development

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{HTTP_HOST} ^localhost
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA]

# Staging

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{HTTP_HOST} ^staging.mydomain.com
RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA]

# Production

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteCond %{HTTP_HOST} ^www.mydomain.com
RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA]
9 голосов
/ 20 июля 2011

Один из вариантов - установить переменные среды в httpd.conf (или в другом месте), которые определяют вашу среду.

Например (в httpd.conf):

SetEnv ENVIRONMENT production

.htaccess)

RewriteEngine on

# Development
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} != /favicon.ico
RewriteCond %{ENV:ENVIRONMENT} = development
RewriteRule ^(.*)$ /app/index.php?request=$1 [L,QSA]

# Staging
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} != /favicon.ico
RewriteCond %{ENV:ENVIRONMENT} = staging
RewriteRule ^(.*)$ /html/app/index.php?request=$1 [L,QSA]

# Production
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} != /favicon.ico
RewriteCond %{ENV:ENVIRONMENT} = production
RewriteRule ^(.*)$ /index.php?request=$1 [L,QSA]

Не проверено, но я думаю, что концепция достаточно обоснована, чтобы разобраться в любых проблемах; -)

1 голос
/ 20 июля 2011

Можете ли вы не просто разместить файлы .htaccess в каждой из сред, а затем просто проигнорировать файл в любой используемой вами FTP-программе или программе развертывания?

Альтернатива, то, что я делаю, настроеноVirtualHosts на моем локальном хосте, который находится в том же домене, что и производственный сайт, но с префиксом dev..Например, www.example.com и dev.example.com.Таким образом, я всегда могу быть уверен, что root - это каталог верхнего уровня любого хоста, который я использую, независимо от среды;и мне не нужно переписывать мои .htaccess директивы.

0 голосов
/ 20 июля 2011

Чак Д, вариант Думитру Чебана очень хорош.Но я предлагаю вам попробовать также вариант иметь некоторый флаг в вашем коде - не в .htacces.

Также, хорошее предложение rudi_visser.Но я хочу добавить здесь, что в идеальной системе мы должны использовать только Apache * .conf и отклонять .htaccess (просто глупая производительность).

Поэтому я предлагаю вам иметь некоторый флаг в коде,избегайте .htacess (если можете) и переключайте env.простым значением conf или некоторой логикой вроде if locaslhost == host then ...

...