.htaccess URL重写失效:短链接跳转至首页而非目标页面
.htaccess URL重写错误分析与修复
核心错误点
错误1:误用
%{HTTP_POST}变量
第一条规则里的RewriteCond %{HTTP_POST} !www\.mysite\.it$完全错误,%{HTTP_POST}用于识别POST请求方法,而你需要匹配的是请求的主机名,正确变量应为%{HTTP_HOST}。这个错误会导致所有请求被强制跳转到www域名,后续的短链接重写规则根本无法执行。错误2:正则结尾的多余转义
短链接规则RewriteRule ^I-([0-9]+)\$ join.php?invitation=$1 [NC]中的\$是无效转义,正则里$本身就表示字符串结尾,转义后会变成匹配字面的$符号,导致规则永远无法匹配I-123456这类路径。冗余的引擎声明
RewriteEngine On只需在文件开头声明一次,重复声明无意义且增加代码冗余。
修正后的完整.htaccess代码
RewriteEngine On # 非www域名跳转到www(修复主机名匹配错误) RewriteCond %{HTTP_HOST} !^www\.mysite\.it$ RewriteRule (.*) http://www.mysite.it/$1 [R=301,L] # 短链接重写规则(修复正则结尾转义错误) RewriteRule ^I-([0-9]+)$ join.php?invitation=$1 [NC,L] # 防盗链规则(补充正则结束符,避免误匹配无关域名) RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mysite\.it(/.*)?$ [NC] RewriteRule \.(jpg|jpeg|png|gif|bmp|php|css)$ - [NC,F,L] Options -Indexes
修正说明
- 替换
%{HTTP_POST}为%{HTTP_HOST},仅当请求主机不是www.mysite.it时才触发跳转,确保短链接请求能进入后续重写规则。 - 移除
$前的转义符,让正则正确匹配I-开头的数字路径。 - 给短链接规则添加
L标记,避免后续规则干扰,提升执行效率。 - 完善防盗链规则的正则,确保仅匹配mysite.it相关的来源域名。
内容的提问来源于stack exchange,提问作者Marco Scarpa
相关产品推荐
相关产品推荐

