2011-07-06 33 views
0

我试图将所有请求重写为不存在但文件夹存在的文件。只有存在文件夹但文件不存在时才重写

我的意思是:

说我有这个文件夹结构:

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 

是,这将改写www.example.com/bar3/bar3.html即使/富/ BAR3目录不存在。

感谢您的帮助!

回答

2

这些规则应该做的工作:

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

  2. 这些规则只有在被请求的资源至少有一个文件夹时才有效(显然 - 按要求)。

+0

非常好!非常感谢你的工作! – RHollister

相关问题