apache - 仅在找不到文件时才重定向请求?

标签 apache .htaccess mod-rewrite

我希望可以使用mod_rewrite和Apache来做到这一点,但是也许还有另一种方法可以考虑。

在我的网站上,我为客户的网站的皮肤版本设置了目录。如果Web根目录为/home/blah/www,则客户端目录将为/home/blah/www/clients/abc。当您通过Web浏览器访问客户端目录时,我希望它使用客户端目录中所有请求的文件(如果存在)。否则,我希望它使用Web根目录中的文件。

例如,假设客户端不需要自己的index.html。因此,某些代码将确定index.html中没有/home/blah/www/clients/abc,而将使用/home/blah/www中的那个。请记住,我不想随时将客户端重定向到Web根,如果客户端目录未指定其自己的副本,我只想使用具有该名称的Web根文件。无论文件存在于目录中还是根目录中,Web浏览器仍应指向/clients/abc。同样,如果客户端目录中存在对news.html的请求,并且该请求确实存在,则只需提供该文件而不是网络根目录的news.html即可。用户的体验应该是无缝的。

我需要它来处理对任何文件名的请求。例如,如果我需要为我可能要重定向的每个文件在.htaccess中添加新行,则由于需要太多的维护,并且由于文件数量过多,很有可能出现错误,这会破坏目的。

在示例中,请指出您的代码是放在客户端目录的.htaccess文件还是Web根目录中。首选Web根。

最佳答案

# If requested resource exists as a file or directory, skip next two rules
RewriteCond %{DOCUMENT_ROOT}/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/$1 -d
RewriteRule (.*) - [S=2]
#
# Requested resource does not exist, do rewrite if it exists in /archive
RewriteCond %{DOCUMENT_ROOT}/archive/$1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/archive/$1 -d
RewriteRule (.*) /archive/$1 [L]
#
# Else rewrite requests for non-existent resources to /index.php
RewriteRule (.*) /index.php?q=$1 [L] 

Rewrite if files do not exist

关于apache - 仅在找不到文件时才重定向请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/595005/

相关文章:

Apache "File not found."而不是 404. 错误文档

python - 简单的 mod_rewrite 示例

apache - 在 CentOS 上安装 apache 模块

apache - 在htaccess中使用Mod访问阻止多个IP范围

Apache 不能同时使用 SSL 运行两个虚拟主机

递归子文件夹链接的 .htaccess 规则

apache - 使用 drupal 将 SSL http 重定向到 https

php - 如何禁用不需要的请求? (MySQL、.htaccess、PHP)

php - WAMP 2.4 - MYSQL 实例图标保持橙色

apache - 如何停止在 tuleap 9.1 上使用 ssl?