现有PHP应用通过.htaccess实现URL美化重写及参数读取咨询
完整.htaccess配置方案
首先请确认你的Apache环境已开启mod_rewrite扩展,且站点配置中的AllowOverride参数设置为All,否则.htaccess规则不会生效。
以下是满足需求的完整配置,直接放在站点根目录即可:
RewriteEngine On # 跳过真实存在的静态文件、目录,避免css/js/图片等资源被重写拦截 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 循环处理URL路径中的键值对,将每一组 /参数名/参数值 转换为 参数名=参数值 追加到查询字符串 RewriteRule ^([^/]+)/([^/]+)(/?.*)$ $3?$1=$2 [QSA,N] # 根路径映射到index.php RewriteRule ^$ index.php [L] # 页面名路径映射:如 /product 映射到 product.php,/products-list 映射到 products-list.php RewriteRule ^([a-zA-Z0-9_-]+)/?$ $1.php [L]
PHP参数读取说明
不需要自行编写解析函数处理URL,上述重写规则已经自动将路径中的所有键值对转换为标准的GET参数格式,你可以直接使用原生$_GET全局数组读取参数,和传统?拼接参数的读取方式完全一致:
- 访问
/var1/aaa/var2/bbb/var3/ccc时,直接调用$_GET['var1']即可获取值aaa - 访问
/product/var4/ddd/var5/eee时,直接调用$_GET['var4']即可获取值ddd
常见问题排查
如果规则不生效,优先检查以下两项:
- 执行
phpinfo()查看mod_rewrite是否处于启用状态 - 检查Apache站点配置中对应站点的
AllowOverride参数是否设置为All
内容的提问来源于stack exchange,提问作者Tao
相关产品推荐
相关产品推荐

