如何将/forums/user.php?user_id=6/改为/forums/user.php/6/并正常访问?
搞定URL重写:让/forums/user.php/6/正常访问
直接给你调整后的可用规则,把它放在**/forums目录下的.htaccess**文件里:
Options -MultiViews RewriteEngine On # 把/user.php/xxx/ 转成后台能识别的/user.php?user_id=xxx RewriteRule ^user\.php/([^/]+)/?$ user.php?user_id=$1 [L,QSA]
为啥原来的规则会导致空白?
- 大概率是Apache的MultiViews功能在捣乱——它会自动把
/user.php/6这类路径当成直接访问user.php文件,跳过你的重写规则,导致程序拿不到正确的user_id参数,页面直接空白。加Options -MultiViews就是关掉这个冲突功能。 - 加上
QSA标志是为了保留URL里可能存在的其他查询参数,比如访问/user.php/6/?foo=bar时,不会弄丢foo参数,程序能正常接收。
可选:把旧URL自动跳转到新URL
如果想让原来的/forums/user.php/?user_id=6/自动跳转到新的友好URL,再在RewriteEngine On之后加上这段规则:
# 旧URL永久重定向到新URL,对SEO更友好 RewriteCond %{QUERY_STRING} ^user_id=([^&]+) RewriteRule ^user\.php/?$ user.php/%1/? [R=301,L]
最后确认这几点
- 确保Apache已经启用了
mod_rewrite模块(没开的话得先开启) - .htaccess文件权限设置正确,Apache能读取它(一般设为644即可)
- 检查你的
user.php代码,确认是用$_GET['user_id']正确获取参数,别写错了
内容的提问来源于stack exchange,提问作者buckler
相关产品推荐
相关产品推荐

