You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.htaccess将目录式URL重写为PHP文件的问题排查

解决URL重写问题的正确配置

问题根源

  1. 第一个规则触发404:如果.htaccess放在naveesh目录下,规则开头的/naveesh/是绝对路径,和.htaccess相对当前目录的匹配逻辑冲突,导致无法正确匹配请求。
  2. 第二个规则出现过多重定向:隐藏.php扩展名的规则会和services重写规则循环触发——重写后的services.php会被扩展名规则再次处理,引发无限内部重定向。

正确配置方案

方案1:.htaccess放在naveesh子目录下

RewriteEngine On
RewriteBase /naveesh/

# 优先处理services的动态URL重写
RewriteRule ^services/([^/]+)/?$ services.php?serv=$1 [L,QSA]

# 隐藏.php扩展名,添加条件避免循环
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

方案2:.htaccess放在网站根目录(htdocs)下

RewriteEngine On

RewriteRule ^naveesh/services/([^/]+)/?$ /naveesh/services.php?serv=$1 [L,QSA]

关键注意事项

  • 规则顺序优先:必须先处理动态URL重写,再处理静态文件的扩展名隐藏,避免循环匹配。
  • 路径匹配逻辑:子目录下的.htaccess不要用绝对路径开头,配合RewriteBase指定基准路径更稳妥。
  • 参数格式转换:如果需要把URL中的Boat-Dealers转成参数Boat%20Dealers(连字符换空格),可以二选一:
    • 规则加B标志:RewriteRule ^services/([^/]+)/?$ services.php?serv=$1 [L,QSA,B]
    • PHP代码处理:$_GET['serv'] = str_replace('-', ' ', $_GET['serv']);

内容的提问来源于stack exchange,提问作者consolenine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:42:07