修改.htaccess代码实现URL参数传递与友好URL重定向
修正后的.htaccess规则实现两种URL访问需求
以下是适配你需求的完整.htaccess代码:
RewriteEngine ON RewriteBase / # 外部重定向:直接访问app/views下的php文件时,重定向到根目录对应路径 # 单独处理acessorios.php,重定向到期望的accessories.php RewriteCond %{THE_REQUEST} \s/app/views/acessorios\.php\s [NC] RewriteRule ^ /accessories.php? [R=301,L] # 处理其他php文件的外部重定向 RewriteCond %{THE_REQUEST} \s/app/views/([^.]+\.php)\s [NC] RewriteCond %1 !=acessorios.php RewriteRule ^ /%1? [R=301,L] # 内部重写:处理路径式友好URL # 匹配 /accessories/[id] RewriteRule ^accessories/(\d+)/?$ /app/views/acessorios.php?id=$1 [QSA,L] # 匹配 /accessories/[id]/[name] RewriteRule ^accessories/(\d+)/([^/]+)/?$ /app/views/acessorios.php?id=$1&name=$2 [QSA,L] # 匹配 /accessories/[id]/[name]/[image] RewriteRule ^accessories/(\d+)/([^/]+)/([^/]+)/?$ /app/views/acessorios.php?id=$1&name=$2&image=$3 [QSA,L] # 内部重写:处理带查询参数的标准URL(accessories.php -> acessorios.php) RewriteRule ^accessories\.php$ /app/views/acessorios.php [QSA,L] # 保留原有的其他php文件内部重写规则 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^.]+\.php)/?$ /app/views/$1 [QSA,L]
规则说明
外部重定向:
- 若直接访问
/app/views/acessorios.php,将301重定向到根目录的/accessories.php,统一对外URL形式。 - 其他
/app/views/xxx.php的访问,依旧重定向到/xxx.php,维持原有功能。
- 若直接访问
路径式友好URL映射:
- 三条规则分别匹配不同层级的路径:
/accessories/数字:提取id参数,内部指向/app/views/acessorios.php?id=数字/accessories/数字/名称:提取id和name参数,内部指向/app/views/acessorios.php?id=数字&name=名称/accessories/数字/名称/图片名:提取id、name、image参数,内部指向对应带参的acessorios.php
- 所有规则带
QSA标记,确保额外的查询参数也能被传递。
- 三条规则分别匹配不同层级的路径:
标准带参URL映射:
- 根目录的
/accessories.php(无论带多少查询参数),内部直接映射到/app/views/acessorios.php,保留所有参数。
- 根目录的
原有规则兼容:
- 保留了原有的非文件、非目录的PHP文件重写规则,不影响其他页面的正常访问。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

