当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《仅在找不到文件时才重定向请求?》经验,为你挑选了3个好方法。

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

在我的网站上,我为客户端设置了重新设置的网站版本目录.如果是Web根目录/home/blah/www,那么客户端目录就是/home/blah/www/clients/abc.当您通过Web浏览器访问客户端目录时,我希望它在客户端目录中使用任何请求的文件(如果存在).否则,我希望它使用Web根目录中的文件.

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

我需要这个来处理任何文件名的请求.例如,如果我需要为.htaccess我可能想要重定向的每个文件添加一个新行,它就会失去目的,因为需要太多的维护,并且在给定大量文件的情况下很有可能出错.

在您的示例中,请指明您的代码是否位于客户端目录中的.htaccess文件或Web根目录中.Web root是首选.



1> Jeremy L..:
# 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] 

从重写,如果文件不存在



2> Happy..:

这个怎么样?

# 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]



3> DivideByHero..:

我似乎对上面的每个例子至少有一个问题.%{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]

谢谢你的帮助!

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有