Htaccess отдельно для локального хостинга и производства

#.htaccess #localhost #production

Вопрос:

Как создать Htaccess, который будет иметь определенный и отдельный код для локального хоста и производства. Я имею в виду, что когда мы работаем над локальным хостом, это должен быть рабочий код локального хоста, а в производстве он должен загружаться только производственным кодом. Так что я могу использовать один Htaccess для локального и производственного использования, и это сэкономит много времени. Ниже приведена модель, которую я хотел бы реализовать. Было бы очень признательно, если бы кто-нибудь мог помочь в этом. Потому что я трачу на это много времени и не нашел никакого хорошего подхода к этому. заранее спасибо!

 <Localhost>
---localhost code goes here 
---it should be only work in localhost and not at all in Production
</localhost>

<Production>
---production code goes here 
---it should be only work in Production and not at all in Localhost
</Producton>
 

Комментарии:

1. Это не идея, лежащая в основе распределенного файла конфигурации. Эти файлы предназначены для удовлетворения внутренних требований приложения. Общая, специфичная для домена настройка должна выполняться в конфигурации хоста http-сервера. Так централизовано, а не распределено. Важно разделять правила, относящиеся к конкретному домену, и правила, относящиеся к конкретному приложению.

2. Просто из любопытства: зачем вам это нужно? Разве это не сильно усложнило бы отладку? Какие части действительно должны отличаться?

3. @NicoHaase Когда я настраиваю HTTPS с помощью Htaccess, он нужен мне только в производстве, потому что он покажет ошибку в localhost. Более того, мне не нужно кэширование htaccess в localhost, но нужно в производстве. Надеюсь, вы поняли мои трудности. Я надеюсь, что кто-нибудь сможет прийти с этим решением, это будет достойное решение для всех нас. Потому что мы не должны сильно заботиться о htaccess, как только эта проблема будет решена.

4. Почему бы вместо этого не настроить HTTPS в основной конфигурации Apache?

Ответ №1:

Большая часть кода .htaccess должна быть одинаковой на локальном и производственном. (В противном случае, как вы это проверяете?)

Однако одним из самых чистых способов разделения директив между серверами является Define (требуется Apache 2.4) переменная в конфигурации сервера одного из серверов (например. машина разработки):

 Define DEVELOPMENT
 

Это может быть определено в любом месте конфигурации сервера (не .htaccess ), но всегда рассматривается как глобальное для сервера, независимо от того, определено оно внутри <VirtualHost> контейнера или нет. Вам не нужно указывать значение (2-й) аргумент, так <IfDefine> как директива (см. Ниже) не проверяет это. Как всегда, всякий раз, когда вы вносите изменения в конфигурацию sever, вам нужно перезапустить Apache, чтобы изменения вступили в силу.

И ссылайтесь на это в .htaccess :

 <IfDefine DEVELOPMENT>
    # Local / development directives only
</IfDefine>

<IfDefine !DEVELOPMENT>
    # Live / production directives only
</IfDefine>
 

! Префикс проверяет, что переменная не определена.

В зависимости от того, какие директивы вам нужно содержать, вы можете использовать <If> контейнер и проверить что-то вроде запрошенного имени хоста (например, staging.example.com vs www.example.com для живого сайта). Однако <If> контейнеры не работают одинаково с mod_rewrite.

Ссылка:

Комментарии:

1. Спасибо за ваш ответ. Я попробовал следующее, но это не работает. Дайте мне знать, если я ошибаюсь. # локальный <Если определить РАЗРАБОТКУ> директорыиндекс category.php <IfDefine РАЗРАБОТКА></IfDefine> # удаленный </IfDefine><IfDefine !РАЗРАБОТКА> DirectoryIndex subcategory.php <IfDefine !РАЗРАБОТКА></IfDefine>

2. @RenJitsm Вы определили переменную в конфигурации сервера (не .htaccess) и перезапустили Apache?

3. Я не очень разбираюсь в PHP, можете ли вы поделиться, как это сделать. Мой-это просто основной Php-проект, и на нем нет никакой конфигурации.

4. @RenJitsm Это не имеет никакого отношения к PHP, это полностью Apache. В файле конфигурации сервера Apache или <VirtualHost> контейнере, в котором вы определили свой сайт (хотя определения всегда являются глобальными ), вам нужна директива Define DEVELOPMENT , чтобы фактически определить эту переменную. (Название DEVELOPMENT было просто предложением, вы можете назвать его так STAGING или LOCAL иначе, если хотите. Только в верхнем регистре по соглашению.) После внесения изменений в конфигурацию сервера вам необходимо перезапустить Apache, чтобы изменения вступили в силу.

5. Это Работает! Ты Потрясающая. Я надеюсь, что смогу задать вам вопросы, добавив комментарий здесь. Дайте мне знать любой другой способ получить вашу поддержку. Это полезно не только для меня, но и для всех разработчиков. Большое Вам Спасибо за Вашу Замечательную Помощь!.