我在 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