2017-02-15 4 views
1

сообщества,Apache mod_rewrite Расхождение

У меня есть следующая проблема: для частного проекта, я хотел создать хороший URLs с mod_rewrite.

Локально (Win 10, Apache 2.4.23) каждое правило в моем .htaccess отлично работает. Удаленно (Ubuntu 16.04, Apache 2.4.18) первые 3 правила вообще не работают, в частности, все возвращают 404 не найденную ошибку.

Пожалуйста, обратите внимание:

# Basic site rules 
RewriteRule ^login$ /login.php 
RewriteRule ^logout$ /login.php?logout 
RewriteRule ^signup$ /signup.php 
RewriteRule ^confirm/(.*)$ /signup.php?confirm&regkey=$1 

# mail list 
RewriteRule ^mails$ /manage_mail.php 
RewriteRule ^mail/list/ip$ /manage_mail.php?mode=create_iplist 
RewriteRule ^mail/list/usernames$ /manage_mail.php?mode=create_usernamelist 

and more rules here... 

Правила 1-3 (Логин, выход из системы, регистрация) вернуть вышеупомянутую ошибку 404. Каждое следующее правило работает по назначению.

Любые идеи? Спасибо заранее.

Edit # 1: поцарапан

Edit # 2: Это ВХост я использую:

<VirtualHost *:80> 
    ServerName domain.me 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/domain.me/html 
    <Directory /var/www/domain.me/html> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride All 
      Require all granted 
    </Directory> 
    ErrorLog "|/usr/bin/cronolog /var/www/domain.me/log/%Y-%m/error_%Y-%m-%d.log" 
    CustomLog "|/usr/bin/cronolog /var/www/domain.me/log/%Y-%m/access_%Y-%m-%d.log" combined 
</VirtualHost> 

Мой файл /etc/apache2/apache2.conf выглядит очень похоже.

+0

Вы уверены, что в конфигурационных файлах Apache для localhost в этом каталоге установлена ​​опция «AllowOverride All»? – artur99

+0

Вы можете получить доступ к страницам под их длинным именем ('/ login.php' и т. Д.)? – neuhaus

+0

Вы уверены, что это не браузер, кеширующий 404 из предыдущих запросов на эти URL. Лучший способ проверить это с помощью утилиты 'curl' cli: ' curl -I http: // www.example.com/login' – Euperia

ответ

1

спасибо за помощь, я нашел решение самостоятельно. Проблема была в опции MultiViews в

<Directory /var/www/domain.me/html> 
     Options Indexes FollowSymLinks MultiViews 
     AllowOverride All 
     Require all granted 
</Directory> 

Как только я удалил ее и перезагрузил конфигурацию, все сработало нормально.

0

Это проблема, которая возникает иногда, когда параметр AllowOverride не установлен All в конфигурациях apache.

Я не знаю, где вы настроили свои конфигурации, но я полагаю, что у вас их есть в /etc/apache2/apache2.conf или /etc/apache2/httpd.conf.

В этом файле вы должны перейти в тег <Directory "LOCATION">, где указано расположение вашей папки public_html [1] и добавьте параметр AllowOverride All.

Или, если вы не можете найти этот каталог, просто добавьте в конец новый тег <Directory> для папки public_html.

Он должен выглядеть следующим образом:

<Directory "folder_location"> 
    Require all granted 
    AllowOverride All 
</Directory> 

[1] Я предполагаю, что это имя папки, в которой у вас есть ваши PHP-файлы.

+0

Я расширил свой вопрос. – Kapparina