【问题标题】:.htaccess conditional rewrite.htaccess 条件重写
【发布时间】:2009-07-05 23:33:04
【问题描述】:

我正在尝试使用 .htaccess 文件和 Apache 创建条件重写规则。

基本上我需要的是 Apache 会检查请求的文件是否存在于子文件夹中,在这种情况下 Apache 会为这个现有文件提供服务,或者,如果文件不存在,Apache 会加载 index.php 文件.

我使用的文件夹结构是:

- /gallery
  - /cache
  - index.php
  - .htaccess

另外,我现在拥有的 .htaccess 是

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+) - [PT,L]
RewriteRule ^(.*)$ index.php/$1 [L]

但是,这仅在我要查找的文件位于 /gallery 文件夹中时才有效,但是我需要查看该文件是否存在于 /cache 文件夹中。

有谁知道如何修改此规则以实现这一目标?

提前谢谢你,

标题

【问题讨论】:

  • 我不认为 mod_rewrite 可以做到这一点,但我有兴趣看看它是否可能。

标签: .htaccess mod-rewrite


【解决方案1】:

试试这些规则:

RewriteCond %{REQUEST_URI} ^/(([^/]+/)*)gallery/
RewriteCond %{DOCUMENT_ROOT}%1gallery/cache/$0 -f
RewriteRule ^.+ cache/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* index.php/$0 [L]

第一条规则检查请求的路径是否是 cache 目录中现有文件的路径。如果是这样,它会将请求重写到该文件。

【讨论】:

  • 首先让我感谢您尝试帮助解决此问题。但是,您提供的脚本似乎不适用于我的设置。当我尝试使用“example.com/gallery/220-165-clouds.jpg”之类的 URL 访问某些内容时,即使图像存在于 /cache 文件夹中,我也无法获取图像,而且我没有也无法获取 index.php 文件。我得到的是 404 错误 :( 你知道这可能是什么原因吗?
  • 它对我来说很好用。尝试使用 mod_rewrite 的日志进行一些调试 httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteloglevel
  • 尝试找出 %{DOCUMENT_ROOT}%1gallery/cache/$0 的评估值。您可以将其附加到 URL:RewriteCond %{REQUEST_URI} ^/(([^/]+/)*)gallery/ RewriteCond %{QUERY_STRING} ^$ RewriteRule ^.+ $0?%{DOCUMENT_ROOT}%1gallery/cache/$0 [L,R=301]
  • 耶!有用!第二行的“画廊”之前有一个斜杠 (/)。我现在有了一个非常简洁的带有静态文件缓存的自动图像调整大小脚本。非常感谢,您绝对应该得到这个正确答案。
  • 如果您的 URL 是固定的(因此它始终是 /gallery/…),您可以删除第一个 RewriteCond 和第二个 RewriteCond 中的 %1。那只是为了在/gallery/…之前还有更多的情况。
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 2011-10-02
  • 2016-12-14
相关资源
最近更新 更多