如果路径上的文件存在,Apache 不会重写请求

标签 apache mod-rewrite

我正在对每个与现有文件或目录不匹配的请求使用 mod_rewrite 进行重写。这是我的配置:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [NC,L]

这用于将 /abc/foo/abc/foo/10 等 URL 映射到我的应用程序。而且效果很好。

为了提高性能,我的应用现在将调用 /abc/foo 的结果存储在相应目录 /abc< 中的文件 foo - 这样在第一次调用后重写条件不再适用(文件不存在),apache 直接提供数据而无需先调用应用程序。效果也很好。

问题是:请求 /abc/foo/10 现在不再导致 URL 被重写,而是收到错误“404 File Not Found”。日志条目表明重写条件 !-f 不再为真,但实际上文件 /abc/foo/10 确实 not 存在. /abc/foo 存在,但是是文件,不是目录。

我怎样才能让它工作?

(多 View 已禁用)

最佳答案

这是因为 foo 作为文件存在,而 apache 为 foo 提供附加的/10 作为查询字符串传递。因此,您的应用程序应该向 foo 文件写入一些额外的代码,该代码还会检查请求是否包含一些额外的 url 组件,然后处理目录“foo”和文件 10 的创建。

关于如果路径上的文件存在,Apache 不会重写请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483005/

相关文章:

java - 使用反向代理时如何设置 Java Web 应用程序的上下文根

php - 访问根目录之外的文件

php - htaccess 重写,如果 url 扩展名是 .php 删除它

php - mod 重写动态 php 值

php - 自定义错误 403 页面 PHP

apache - 如何在 .htaccess 503 重定向中保持网站 url 相同

java - 记录生成的 CXF 客户端的原始 XML

apache - .htaccess mod_rewrite 在子目录中不起作用

php - Apache RewriteCond 防止无限循环

Apache - 使用 .htaccess 将图像重写为 php 文件