You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

htaccess Rewrite规则在文件存在时失效,需强制重写至指定文件

解决Apache Rewrite规则强制跳转问题

你的问题核心是存在的文件会绕过Rewrite规则直接响应,这是Apache默认行为导致的——当请求路径对应实际存在的文件时,Apache会直接返回该文件,不执行后续Rewrite规则。要实现所有请求无论文件是否存在都跳转到authorize.php,可以按以下方式修改规则:

RewriteEngine On
# 排除目标文件本身,避免无限循环重写
RewriteCond %{REQUEST_URI} !^/authorize\.php$
# 匹配所有请求路径,自动合并查询参数
RewriteRule ^(.*)$ authorize.php?f=$1 [L,QSA]

关键修改说明:

  • 添加RewriteCond %{REQUEST_URI} !^/authorize\.php$:排除对authorize.php自身的请求,防止出现无限循环重写的问题。
  • 使用QSA(Query String Append)flag:自动将原始请求的查询参数合并到新的URL中,比手动拼接%{QUERY_STRING}更稳定,避免参数冲突。
  • 简化匹配规则^(.*)$:匹配所有请求路径(包括带后缀的文件路径),确保覆盖所有场景。

测试验证:

  • 请求http://domain/sample2.pdf(文件不存在):正常跳转到authorize.php?f=sample2.pdf
  • 请求http://domain/sample.pdf(文件存在):同样跳转到authorize.php?f=sample.pdf,不会直接打开原文件
  • 带查询参数的请求(如http://domain/test.html?id=123):会跳转至authorize.php?f=test.html&id=123,参数完整保留

内容的提问来源于stack exchange,提问作者Filip Popović

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:18:09