.htaccess(Apache)URL重写引发404错误问题求助
问题排查与修正方案
你的.htaccess配置存在几个关键问题,导致规则冲突和功能失效,以下是修正后的完整配置,以及问题说明:
修正后的.htaccess代码
# 开启重写引擎(只需一次) RewriteEngine On # HTTPS强制重定向(优先执行) RewriteCond %{SERVER_PORT} !=443 RewriteRule ^(.*)$ https://int-politics.com/$1 [R=301,L] # 个人资料URL重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^profile/([^/]+)$ /profile/show-profile.php?user=$1 [L] # 404页面处理 ErrorDocument 404 /pagenotfound.php
原配置的问题说明
- 重复开启RewriteEngine:原配置分三次开启
RewriteEngine On,虽语法允许但会打乱规则执行顺序,只需在开头开启一次即可。 - 规则顺序错误:HTTPS重定向属于外部跳转,应放在最优先位置;个人资料的重写规则要放在404处理之前,否则请求
/profile/admin会被先判定为不存在的文件/目录,直接触发404,无法执行重写。 - 404规则冲突:原配置同时用RewriteRule和ErrorDocument处理404,且RewriteRule未加
[L]标志,导致请求不存在的页面时规则会继续向下执行,最终只输出路径。保留ErrorDocument 404即可,Apache会自动处理不存在的文件/目录跳转。 - 个人资料重写的路径问题:原配置的
RewriteBase /profile/会导致规则匹配范围受限,直接用绝对路径匹配^profile/([^/]+)$更清晰,避免路径混淆。
内容的提问来源于stack exchange,提问作者DrZocking
相关产品推荐
相关产品推荐

