2011-05-24 36 views
1

我有一个情况,我有几个客户端,其中每一个我想能够通过mydomain.com/clientname访问他们的网站。为了保持组织性,我将客户站点的实际文件存储在/ client/clientname中。国防部重写目录检查

RewriteRule ^client1(.*)$ /client/client1$1 [L] 
RewriteRule ^client2(.*)$ /client/client2$1 [L] 

我试图做到这一点更清洁的方式,通过在客户端目录检查:我可以把很多很多这些线在我的.htaccess达到预期的效果存在于/客户端或不在。 (如果我确定它不是一个有效的文件或目录)。但由于某种原因,这似乎不工作:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond /client/%{REQUEST_FILENAME} -d 
RewriteRule ^(.*)$ /client/$1 [L,QSA] 

我错过了什么?

回答

3

Apache mod_rewrite docs

REQUEST_FILENAME

文件或脚本符合要求,如果这已经由当时REQUEST_FILENAME服务器确定完整的本地文件系统路径被引用。否则,例如在虚拟主机上下文中使用时,其值与REQUEST_URI相同。

你行:

RewriteCond /client/%{REQUEST_FILENAME} -d 

似乎会导致问题,因为它使阿帕奇查找下列文件路径:

/client/[the whole filesystem path of requested file] 

这是相当肯定不是你想要的。究竟

RewriteCond %{DOCUMENT_ROOT}/client%{REQUEST_URI} -d 
+0

它:

您可以按如下更正!谢谢。不幸的是,我很清楚这不会那么容易。由于我认为像/客户端/订单(这不是一个目录),如果我想检查一个目录,我需要对请求URI做一些棘手的事情 – 2011-05-24 18:50:29

+0

@epalla我不知道我是否明白了,你可以尝试RewriteCond%{DOCUMENT_ROOT}/client%{REQUEST_URI} -f(而不是-d)。 – 2011-05-24 21:15:56

+0

我在这里创建了一个后续问题:http://stackoverflow.com/questions/6115775/rewrite-condition-to-compare-top-level-directory-from-request-uri – 2011-05-24 22:04:33