我的情况是我有几个客户,我希望每个客户都可以通过mydomain.com/clientname访问他们的网站。为了保持组织有序,我将客户端站点的实际文件存储在/ client / clientname中。我可以通过在我的.htaccess中添加大量的这些行来实现预期的效果:
RewriteRule ^client1(.*)$ /client/client1$1 [L]
RewriteRule ^client2(.*)$ /client/client2$1 [L]
等
我试图通过检查客户端目录是否存在于/ client中来以更干净的方式执行此操作。 (如果我确定它不是一个有效的文件或目录)。但由于某种原因,这似乎不起作用:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond /client/%{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ /client/$1 [L,QSA]
我错过了什么?
答案 0 :(得分:3)
<强> REQUEST_FILENAME 强>
匹配请求的文件或脚本的完整本地文件系统路径,如果在引用REQUEST_FILENAME时服务器已经确定了该路径。否则,例如在虚拟主机上下文中使用时,其值与REQUEST_URI相同。
你的专栏:
RewriteCond /client/%{REQUEST_FILENAME} -d
似乎导致了这个问题,因为它使Apache寻找以下文件路径:
/client/[the whole filesystem path of requested file]
非常肯定不是你想要的。
您可以按照以下方式更正:
RewriteCond %{DOCUMENT_ROOT}/client%{REQUEST_URI} -d