我希望可以使用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/