Intereting Posts
Является ли использование PHP для сопоставления нескольких файлов JavaScript, которые будут быстрее, чем включение их отдельно? PHP mysqli_fetch_all дает мне пустой экран Доступ к массиву в PHP из Javascript / jQuery PHP ouput записывается в файл в нечитаемом формате pecl: команда не найдена Пример внедрения PHP / MySQL Определите, запрашиваются ли HTTP-запросы из приложения Android или нет? и затем отреагировать соответствующим образом Как удалить строку под заголовком и выше $ html в TCPDF? Как решить «Ошибка вызова неопределенной функции dbase_open ()» в окнах Получайте и обновляйте текст каждые несколько секунд от источника HTTP до HTTPS-сайта Я хочу получить результат поиска google в php Auto Increment пропускает числа? Как получить идентификатор адреса доставки / биллинга заказа за пределами API-интерфейса Magento? Проблема CURL. PHP-скрипт не работает по вызову Усекать текст без обрезания HTML

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

Я работаю над приложением, которое использует перезаписи 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] 

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

цыпленок

     # 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] 

    Один из вариантов – настроить параметры среды в 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] 

    Непроверенный, но я думаю, что эта концепция достаточно звучит, чтобы понять любые проблемы 😉

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

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

    Чак D, вариант Dumitru Ceban очень хорош. Но я предлагаю вам попробовать также вариант наличия некоторого флага в вашем коде – не в .htacces.

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

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