Назад | Перейти на главную страницу

Apache RewriteRule не работает для подавления расширений, для прочего работает

У меня EC2 на AWS. Настроил сервер (Apache 2, PHP 7.0, ...), включил mod_rewrite. Раньше я проделывал этот процесс много раз, но никогда в Ubuntu 16.04.

В конце концов, тестируя свой сервер, я заметил:

Пример:

Это НЕ РАБОТАЕТ:

<IfModule mod_rewrite.c>
    SetEnv HTTP_MOD_REWRITE On
    AcceptPathInfo On
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

        RewriteRule ^dieta/([\w-]+)?/?([\w-]+)?/?$ dieta.php?usuario_id=$1&dieta_id=$2 [L,QSA]
        RewriteRule ^diario/([\w-]+)?/?([\w-]+)?/?$ diario.php?usuario_id=$1&data_registro=$2 [L,QSA]
        RewriteRule ^diario-fisico/([\w-]+)?/?([\w-]+)?/?$ diario-fisico.php?usuario_id=$1&data=$2 [L,QSA]
        RewriteRule ^treino/([\w-]+)?/?([\w-]+)?/?$ treino.php?usuario_id=$1&treino_id=$2 [L,QSA]

</IfModule>
<IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css         application/x-javascri$
</IfModule>

В этом примере:

www.link.com/dieta/50/20 <- Как Должно быть, не работает.

www.link.com/dieta.php/50/20 <- Работает.

Это РАБОТАЕТ:

AddDefaultCharset utf-8
Options +FollowSymLinks
<IfModule mod_rewrite.c>
    SetEnv HTTP_MOD_REWRITE On
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^([\w-]+)?/?([\w-]+)?/?$ index.php?class=$1&action=$2 [L,QSA]
</IfModule>
<IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css         application/x-javascri$
</IfModule>

www.link.com/index.php/user/get <- Работает.

Кейсы:

Я настроил следующее:

https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-16-04

https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_rewrite-for-apache-on-ubuntu-14-04