2017-01-10 1 views
0

Apache 2.4, Windows 10Apache простое правило переписывание работает хорошо, когда в HTTPd-vhosts.conf, но не тогда, когда в файле .htaccess

виртуального хоста в HTTPd-vhosts.conf:

<VirtualHost sporemvc:80> 
    ServerAdmin [email protected] 
    DocumentRoot "C:/Apache24vhosts/hosts/sporemvc" 
    ServerName sporemvc 
    ErrorLog "logs/sporemvc-error.log" 
    CustomLog "logs/sporemvc-access.log" common 
    <Directory C:/Apache24vhosts/hosts/sporemvc> 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ /index.php [L] 
    </Directory> 
</VirtualHost> 

это работает хороший. И доказывает, что mod_rewrite включен.

Когда весь каталог не существует:

<VirtualHost sporemvc:80> 
    ServerAdmin [email protected] 
    DocumentRoot "C:/Apache24vhosts/hosts/sporemvc" 
    ServerName sporemvc 
    ErrorLog "logs/sporemvc-error.log" 
    CustomLog "logs/sporemvc-access.log" common 
</VirtualHost> 

и есть C: /Apache24vhosts/hosts/sporemvc/.htaccess файл

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php [L] 

Правило перезаписи, похоже, не работает вообще - говорит Apache 404. Что может быть проблемой? Я убедился, что mod_rewrite включен и даже что .htaccess - это ANSI, а не UTF. В журналах Apache и vhost нет ничего более 404.

Что делать неправильно?

+0

Вам необходимо включить интерпретацию файлов стиля .htaccess. Взгляните на их документацию: https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride – arkascha

+1

Кроме того - зачем вы хотите использовать файлы стиля '.htaccess', если у вас есть acces и контролировать реальную конфигурацию хоста http? Эти файлы только создают проблемы и замедляют работу сервера. – arkascha

+0

Привет, спасибо за ответ. Чтобы ответить на ваш вопрос о '.htaccess' - я имею контроль над веб-сервером разработки, это правильно. Но я, возможно, не в контролируемой среде. Также этот параметр в 'conf' требует перезагрузки сервера, что может быть менее удобным в производстве. –

ответ

0

Да, я немой.

Это было AllowOverride Нельзя заменить на AllowOverride All (ну, All в порядке для разработки).

Causa finita.