如何编写简单RewriteRule规则实现友好URL重写
调整后的.htaccess配置方案
你可以直接用下面的代码替换你原有的.htaccess内容,放置在folder目录下即可生效:
Options +FollowSymLinks -MultiViews RewriteEngine On # 原有单级请求自动补.php后缀规则优化 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [NC,L] # 原有自定义路由规则保留,放置在通用规则前避免被覆盖 RewriteRule ^registros/entradas/?$ frmEntradas.php [QSA,L] # 两级友好URL重写规则,适配/folder/xxx/xxx 格式请求 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?second_param=$2 [QSA,L]
规则说明
- 新增的
-MultiViews参数用于关闭Apache默认的内容协商逻辑,避免和重写规则产生冲突导致路径解析异常 - 优化后的.php后缀补全规则增加了目录存在性校验、对应php文件存在性校验,避免无效重写不存在的资源
- 两级路径匹配规则会自动将
https://example.com/folder/abc/def的请求转发到同目录下的abc.php,同时将def作为second_param参数传递,你可以根据自己的业务需求修改参数命名 QSA标识会自动保留原始请求中附带的GET参数,不会出现参数丢失问题
如果需要适配任意多级路径的场景,你可以把上述两级规则替换为全路径转发到统一入口文件的规则,适配自定义路由逻辑:
# 所有不存在的资源请求统一转发到index.php处理 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?full_path=$1 [QSA,L]
配置后你可以在index.php中通过$_GET['full_path']获取完整的路径字符串,自行拆分处理即可实现任意格式的友好URL适配。
内容的提问来源于stack exchange,提问作者Gustavo Rodríguez Sánchez
相关产品推荐
相关产品推荐

