仅当文件夹存在但文件不存在时才重写

时间:2011-07-06 20:09:58

标签: mod-rewrite apache2

我正在尝试将所有请求重写为不存在但文件夹不存在的文件。

我的意思是:

说我有这个文件夹结构:

foo
  '-bar1
  '-bar2
    '-bar2.html
  '-shared
     '-shared.html

我正在寻找的重写规则是照常提供example.com/foo/bar2/bar2.html。将example.com/foo/bar1/bar1.html提供为/foo/shared/shared.html,并且不提供服务example.com/foo/bar3/bar3.html。

总结一下。我正在尝试开发一个RewriteCond,只有当目录存在但文件不存在于该目录中时才会命中。

问题:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

即使/ foo / bar3目录不存在,也会重写www.example.com/bar3/bar3.html。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这些规则应该起到作用:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/ -d
RewriteRule ^(.+)/([^/]+)$ /foo/shared/shared.html [L,QSA]
  1. 这些规则旨在放在根文件夹中的 .htaccess 文件中。如果你需要将它们放在配置文件中(例如httpd-vhost.conf),那么你需要稍微修改它(删除第二个RewriteCond中的一些斜线..或者在RewriteRule中添加前导斜线 - 实际上需要进行测试)。 / p>

  2. 这些规则仅在请求的资源至少包含1个文件夹时显而易见(显而易见 - 根据要求)。