.htaccess ігнорується, навіть якщо VirtualHost має "AllowOverride All"


25

Я запускаю сервер LAMP на Fedora 13, який працює чудово; однак я тільки що додав файл ".htaccess" до папки docroot мого поточного сайту, яка повністю ігнорується.

Я спробував півдюжини різних тестів, включаючи цей:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Але зображення та всі інші сторінки завантажуються прекрасно, а неіснуючі файли все ще 404. Я також спробував це:

order deny,allow
deny from all

Але кожна сторінка все ще завантажується просто чудово. Знову файл .htaccess просто ігнорується на 100%.

Ми розміщуємо наші віртуальні записи в /etc/httpd/conf.d/virtual.conf. Це виглядає приблизно так:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Що ще може спричинити наш сервер повністю IGNORE .htaccessфайл ??

Редагувати:

Я змінив файл .htaccess на вище, щоб краще продемонструвати, що мої зміни ігноруються. Зауважте, що я спробував такий самий файл .htaccess на виробничому сервері, і він працював чудово.

Редагувати 2:

Гаразд, у мене нова інформація! Тільки для тестування я пройшов і тимчасово змінив КОЖНУ директиву "AllowOverride" на AllowOverride All. Я зрозумів, що найперший запис у Каталозі, здається, перемагає всіх інших:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Коли я змінив це AllowOverride All, мої файли .htaccess починають діяти. Це як і всі інші AllowOverride Allдирективи в моїх конфігураційних файлах ігноруються!

Що дає ??

Відповіді:


32

Неймовірно. Пам'ятаєте, як я сказав, що це сервер розробки? Так ... ну ось як дійсно виглядає мій запис у віртуальний хост:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Ти бачиш це? Ну, я цього не зробив. Я ЗАБУТИ змінити мій запис у "Каталозі" на dev.ourwebsite.com замість ourwebsite.com - і це змінило все. Я просто припускав, що Apache видав би помилку, якби каталог не існував; але це стосується лише директиви DocumentRoot. ґрунтується на відповідності - це означає, що він застосовує правила, якщо він відповідає вхідному запиту, але в іншому випадку це не хвилює, якщо ви скажете це AllowOverride про магічні єдинороги.

Нехай це буде уроком для всіх інших, хто приходить шукати - коли все інше не вдається, врахуйте всемогутнього Одруку.


Я ніколи за мільйон років цього не зловив би! У мене також була помилка друку в шляху до каталогу, також проект розробки ... Дякую, що відкрив очі.
gillytech

У мене теж була помилка друку в частині каталогу. Дійсно, це було так засмучує. Було благо, що я зіткнувся з цим і дізнався про те, що я можу робити дуже нерозумні помилки.
Акаш Кумар Шарма

Я знаю, що минуло 7 років, але я просто хотів заскочити і сказати, що ця відповідь просто допомогла мені. Це була річ одного типу. Я скопіював директиви з іншого віртуального хоста і змінив неправильний біт. Дякуємо, що поділилися цією інформацією! Surf Wisely.
dolst

5

Перевірте, чи немає будь-якого іншого "AllowOverride None", представленого в "httpd.conf" над декларацією virtualhosts. Ймовірно, у вас є "AllowOverride None" в docroot.


Сервер, з яким я працюю, - це сервер розробки, і це точний дублікат нашого виробничого сервера. Файли httpd.conf практично однакові. ТОЛЬКО суттєва відмінність полягає в тому, що наш "virtual.conf" на цьому сервері має менше записів, і кожен сайт має префікс dev.. Але сервер виробництва працює добре, файли .htaccess поводяться точно так, як очікувалося, а сервер розробки просто ігнорує файл .htaccess.
Брайан Лейсі

0

Три здогадки:

Чи є пробіл після коми у рядку order deny, allowв .htaccess? Apache цього не любить. Для мене на F13 я отримав 500 тисяч.

У вас є AccessFileNameдиректива де-небудь?

Якщо ви використовуєте selinux, чи є у вас правильний контекст для файлу ( ls -lZ)?


Я не отримую 500 помилок. Файл .htaccess просто ігнорується. І я переконався, що у мене все одно немає місця. Я нічого не знаю про selinux або контексти, але я подивився, як перевірити, і, мабуть, це відключено. Щодо того AccessFileName, я оглянусь навколо, але, як я вже говорив у коментарі до відповіді Дениса, конфігурація apache для цих двох серверів фактично однакова.
Брайан Лейсі

У мене також були проблеми з простором. Це зводило мене з розуму.
egorgry

Ну, виправлення: Я МОЮ мати директиву AccessFileName у своєму httpd.conf. У ньому написано:AccessFileName .htaccess
Брайан Лейсі

0

Я мав це на новому сервері, врешті зрозумів, що перезапис модулів не було включено за замовчуванням.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.