В моем апаче httpd.conf
файл у меня есть это объявление внутри VirtualHost
тег.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.shanestillwell.com$ [NC]
RewriteRule ^(.*)$ http://www.shanestillwell.com/$1 [L,R=301]
И это внутри моего .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
Правило в моем httpd.conf
похоже, игнорируется. Правила в .htaccess
уничтожение httpd.conf
переписать правило?
Обычно ваши настройки в файле .htaccess внутри каталога переопределяют настройки файла httpd.conf. Вы можете отключить этот эффект, отредактировав файл httpd.conf и изменив следующую строку
<Directory ...>
AllowOverride all
к
<Directory ...>
AllowOverride none
Это предотвратит переопределение файла .htaccess настроек httpd.conf. Таким образом, настройки в файле .htaccess не будут иметь никакого эффекта.
В Apache файл .htaccess переопределяет httpd.conf для mod_rewrites?
Буквально ответ - «Нет». Тем не мение, ...
В моем апаче
httpd.conf
файл у меня есть это объявление внутриVirtualHost
тег
Если это действительно так прямо внутри <VirtualHost>
контейнер, т.е. в виртуальный хост контексте, тогда эти директивы mod_rewrite должны переопределить директивы mod_rewrite в вашем .htaccess
файл - не наоборот. Это поведение нельзя изменить (например, изменив наследование mod_rewrite с помощью RewriteOptions
директива).
Однако, если эти директивы находятся внутри <Directory>
контейнер (который находится внутри вашего <VirtualHost>
контейнер), т.е. в каталог контекст (в отличие от виртуальный хост context, как было предложено выше), затем директивы mod_rewrite в вашем .htaccess
файл действительно полностью переопределит директивы mod_rewrite в вашем <Directory>
контейнер. Однако это поведение жестяная банка можно изменить, изменив способ наследования директив mod_rewrite. (При любой настройке RewriteOptions InheritBefore
в .htaccess
файл или RewriteOptions InheritDownBefore
в родительском <Directory>
контейнер. InheritDownBefore
требуется Apache 2.4.8. Однако есть и другие предостережения относительно наследования mod_rewrite, о которых следует знать.)
Ссылка:
https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewriteoptions
Наблюдаемое вами поведение (и конкретный синтаксис используемой директивы (см. Ниже) - хотя это может быть просто ошибкой, если код никогда не выполнялся?) Предполагает, что эти директивы находятся в каталог контекст, а не виртуальный хост контекст. Итак, да, директивы mod_rewrite в .htaccess
полностью переопределит родительские директивы - директивы mod_rewrite в <Directory>
контейнер фактически игнорируются.
В стороне:
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Если бы это использовалось в виртуальный хост context, то вы получите ошибочную двойную косую черту в начале URL-пути, потому что в виртуальный хост контекст RewriteRule
шаблон совпадает с полным URL-путем (с префиксом косой черты). Так что $1
Сама обратная ссылка уже будет содержать префикс косой черты до включения дополнительной косой черты в замена.
Однако в каталог контекст, RewriteRule
шаблон совпадает с частичным путем - путь файловой системы за вычетом префикса каталога (который заканчивается косой чертой) - поэтому путь, который соответствует RewriteRule
шаблон никогда не начинается с косой черты в каталог контекст (поэтому вам нужно включить его в замена - как и вы).
если у тебя есть <Directory ...>
с участием AllowOverride all
тогда все, что у вас есть в вашем файле .htaccess, заменит любое предыдущее правило.
Это могло быть в твоем httpd.conf
или на вашем virtualhost
пока он указывает на /
или на путь к вашему домену.