Apache Rewrite Rule报Internal Server Error及伪静态配置问题求助
Apache Rewrite 美化URL配置解决方案
问题根源排查
- 初始配置500错误:规则仅覆盖单参数固定场景,未规避重写循环,且未适配部署路径前缀,触发无限重写返回服务错误。
- 调整后配置异常原因:
- 本地子目录部署未配置
RewriteBase,导致重写路径偏移,请求匹配错误返回首页 - 未做多级路径参数拆分,完整路径全部传入
page参数,后端无法识别多级参数
- 本地子目录部署未配置
完整适配配置
本地子目录部署(部署在/site/目录下,.htaccess放在site目录内)
RewriteEngine On # 子目录部署必填,指定重写基础路径 RewriteBase /site/ # 1. 旧带参URL 301跳转至美化URL(单参数场景:?page=about -> /about) RewriteCond %{THE_REQUEST} \?page=([^&]+)\sHTTP [NC] RewriteRule ^$ %1? [L,R=301] # 2. 旧多参URL 301跳转至美化URL(?page=place&area=west -> /place/west) RewriteCond %{THE_REQUEST} \?page=([^&]+)&area=([^&]+)\sHTTP [NC] RewriteRule ^$ %1/%2? [L,R=301] # 3. 去除index.php前缀跳转 RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC] RewriteRule ^ %1? [NE,L,R=301] # 4. 内部重写:两级路径映射为page+area参数(/place/west -> index.php?page=place&area=west) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/([^/]+)/?$ index.php?page=$1&area=$2 [L] # 5. 内部重写:单级路径映射为page参数(/about -> index.php?page=about) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/?$ index.php?page=$1 [L]
线上根目录部署(部署在域名根目录)
仅需将上述配置中的RewriteBase /site/修改为RewriteBase /即可,其余规则完全一致。
通用场景扩展适配
如果你的站点路径层级不固定(存在三级及以上路径),可以替换上述规则4、5为以下通用规则,将完整路径传入page参数,由后端自行拆分处理:
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?page=$1 [L]
后端获取page参数后,按/拆分即可得到所有层级的路径参数,适配任意深度的URL结构。
内容的提问来源于stack exchange,提问作者OneNation
相关产品推荐
相关产品推荐

