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