我希望有一种方法可以用mod_rewrite和Apache做到这一点,但也许还有另一种方法可以考虑.
在我的网站上,我为客户端设置了重新设置的网站版本目录.如果是Web根目录/home/blah/www
,那么客户端目录就是/home/blah/www/clients/abc
.当您通过Web浏览器访问客户端目录时,我希望它在客户端目录中使用任何请求的文件(如果存在).否则,我希望它使用Web根目录中的文件.
例如,假设客户端不需要自己的客户端index.html
.因此,一些代码将确定没有index.html
in /home/blah/www/clients/abc
并将改为使用/home/blah/www
.请记住,我不想随时将客户端重定向到Web根目录,如果客户端目录没有指定自己的副本,我只想使用具有该名称的Web根目录.Web浏览器仍应指向/clients/abc
该文件是存在还是存在于根目录中.同样,如果news.html
客户端目录中存在请求并且它确实存在,那么只需提供该文件而不是Web根目录news.html
.用户的体验应该是无缝的.
我需要这个来处理任何文件名的请求.例如,如果我需要为.htaccess
我可能想要重定向的每个文件添加一个新行,它就会失去目的,因为需要太多的维护,并且在给定大量文件的情况下很有可能出错.
在您的示例中,请指明您的代码是否位于客户端目录中的.htaccess文件或Web根目录中.Web root是首选.
# 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]
从重写,如果文件不存在
这个怎么样?
# If requested resource exists as a file or directory go to it RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule (.*) - [L] # Else rewrite requests for non-existent resources to /index.php RewriteRule (.*) /index.php?q=$1 [L]
我似乎对上面的每个例子至少有一个问题.%{DOCUMENT_ROOT}
似乎在某些地方做错了,有些/
人物似乎不见了.这是我的解决方案,它.htaccess
位于Web根目录中.
而不是使用两个规则(一个用于找到clients /下的文件,一个用于未找到的文件),我需要检查的是所请求的文件(或目录)是否不存在.因为如果存在,则不需要进行任何更改,它只能使用客户端目录中提供的文件.这是我确定的代码:
RewriteEngine on RewriteCond %{DOCUMENT_ROOT}/clients/$1/$2 !-f RewriteCond %{DOCUMENT_ROOT}/clients/$1/$2 !-d RewriteRule ^clients/([^/]+)/(.*)$ $2 [L]
谢谢你的帮助!