Apache RewriteRule 无法抑制扩展,但对于其他事情却有效

Apache RewriteRule 无法抑制扩展,但对于其他事情却有效

我在 AWS 上有一个 EC2。配置了服务器(Apache 2、PHP 7.0 等),启用了 mod_rewrite。我以前做过很多次这个过程,但从来没有在 Ubuntu 16.04 上做过。

毕竟,测试我的服务器时我观察到:

  • RewriteRules 可以工作,但如果它改变了 url 或扩展名则不行。

例子:

这是不工作:

<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 <-- 有效。

案例:

  • Wordpress 永久链接不起作用(错误 404)。
  • 抑制扩展,不起作用(错误 404)。
  • 与获取变量一起使用,有效。

我已按如下方式配置:

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

相关内容