如何使用.htaccess将带参数的PHP URL转换为友好伪静态URL
解决URL重写问题:将带参数URL转换为友好格式
问题描述
我在news-event-listing.php页面中通过链接把id参数传递到news-inner.php页面,当前访问URL是http://localhost/glc_css/news-inner.php?id=6,希望将其转换成localhost/glc_css/service/6的友好形式。我尝试的.htaccess代码如下:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] #RewriteRule ^ABOUT about.php [NC,L] #RewriteRule ^CONTACT contact.php [NC,L] #RewriteRule ^PRODUCT product.php [NC,L] RewriteRule ^service/([^/\.]+)?$ /news-inner.php?id=$1 [L]
修正方案
你的代码存在两处关键问题,调整后即可实现需求:
- 路径匹配错误:最后一条规则中的
/news-inner.php是绝对路径,会直接指向网站根目录,但你的项目在glc_css子目录下,需改用相对路径。 - 规则顺序冲突:自动添加
.php的规则会优先匹配service/6,尝试查找service/6.php,干扰友好URL的重写逻辑,需把友好URL规则前置。
修正后的.htaccess代码:
RewriteEngine On # 优先处理service/xxx的友好URL重写 RewriteRule ^service/([^/.]+)$ news-inner.php?id=$1 [NC,L] # 再处理自动添加.php后缀的规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^.]+)$ $1.php [NC,L]
补充说明
- 友好URL规则前置,避免被自动补全
.php的规则拦截。 - 移除目标路径前的斜杠,确保在
glc_css子目录下能正确定位news-inner.php。 - 添加
RewriteCond %{REQUEST_FILENAME} !-d规则,防止把真实目录识别为PHP文件处理。
内容的提问来源于stack exchange,提问作者nino cphilip
相关产品推荐
相关产品推荐

