我正在尝试将所有请求重写为不存在但文件夹不存在的文件。
我的意思是:
说我有这个文件夹结构:
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。
感谢您的帮助!
答案 0 :(得分:2)
这些规则应该起到作用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1/ -d
RewriteRule ^(.+)/([^/]+)$ /foo/shared/shared.html [L,QSA]
这些规则旨在放在根文件夹中的 .htaccess 文件中。如果你需要将它们放在配置文件中(例如httpd-vhost.conf
),那么你需要稍微修改它(删除第二个RewriteCond中的一些斜线..或者在RewriteRule中添加前导斜线 - 实际上需要进行测试)。 / p>
这些规则仅在请求的资源至少包含1个文件夹时显而易见(显而易见 - 根据要求)。