.htaccess隐藏ID参数功能失效,求兼容AJAX的修复方案
修复.htaccess中隐藏ID参数的问题
你的.htaccess里隐藏ID参数的功能失效,主要是两个问题:一是匹配规则仅支持单个字符的文件名,二是缺少自动跳转的外部重定向规则。以下是修复后的完整代码,同时保证不影响现有POST、GET及AJAX请求:
Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEngine On RewriteBase / ## 外部重定向:将 /dir/foo.php 跳转到 /dir/foo RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] RewriteRule ^ %1 [R=301,L] ## 内部重写:将 /dir/foo 指向 /dir/foo.php RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L] ## 外部重定向:将 post.php?id=7 跳转到 post/7 RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/([A-Za-z0-9_]+)\.php\?id=([^&\s]+) [NC] RewriteRule ^ /%1/%2? [R=301,L] ## 内部重写:将 post/7 指向 post.php?id=7 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([A-Za-z0-9_]+)/([^/]+)$ /$1.php?id=$2 [L]
关键修复说明
- 修正文件名匹配规则:原规则
([A-Za-z0-9_])仅匹配单个字符,改为([A-Za-z0-9_]+)后可匹配多个字符的文件名(如post) - 添加外部重定向:新增的规则会自动将用户访问的
post.php?id=7类URL永久跳转到post/7,保证URL统一;规则末尾的?会清除原查询字符串,避免跳转后URL残留参数 - 不影响现有请求:
- 内部重写仅处理不存在的文件/目录,不会干扰真实存在的接口和文件
- AJAX请求无论调用
post.php?id=7还是post/7,服务器都会正常处理:前者直接返回内容,后者自动映射到对应PHP文件 - 仅针对带单个
id参数的URL跳转,其他带多参数的GET请求、POST请求均不受影响
内容的提问来源于stack exchange,提问作者Mpilonhle Ngcoya
相关产品推荐
相关产品推荐

