Mod rewrite 仅当文件夹存在但文件不存在时重写';T

Mod rewrite 仅当文件夹存在但文件不存在时重写';T,mod-rewrite,apache2,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.ht

我试图将所有请求重写到一个不存在但文件夹存在的文件中

我的意思是:

假设我有这个文件夹结构:

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 %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
它将重写www.example.com/bar3/bar3.html,即使/foo/bar3目录不存在


谢谢你的帮助

这些规则应该起作用:

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

  • 这些规则只有在请求的资源至少有1个文件夹时才起作用(很明显——按请求)