在我的本地 WAMP 服务器上,.htaccess 中的以下几行不会造成任何问题,并且可以执行我想要的操作:
RewriteEngine On
Options FollowSymLinks
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*?$ foo.php?id=$1 [L]
当我将其上传到我的托管 (LAMP) 网站时,它会导致 500 错误(无论重写规则是否起作用)。经过多次修改后,修复方法是删除正则表达式中的 unhungry/lazy 修饰符,即:
RewriteEngine On
Options FollowSymLinks
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*$ foo.php?id=$1 [L]
现在,在我所介绍的案例中,正则表达式的差异是否有用尚有争议,但在我看来,第一个例子是有效的,它确实在我的本地 WAMP 服务器上运行。那么有谁清楚我为什么会收到 500 错误吗?
答案1
在 foo.php 前添加斜线:
RewriteRule ^foo/([0-9]+)/[a-z0-9-]*?$ /foo.php?id=$1 [L]
或将重写规则从虚拟主机配置移动到.htaccess。