我一直在努力解决这个问题。如果这是一个重复的问题我很抱歉,但我似乎无法找到合适的解决方案。
我想要完成的是以下内容:
如果dev-<sub>.example.com/resources/path/to/resource
的网址sub
不同,请转到/var/www/devEx_<sub>/override/resources/path/to/resource
,如果它产生文件,或者/var/www/devEx_<sub>/main/resources/path/to/resource
否则(我可以处理404)。
我可以找出一个解决方案,我手动添加每个人sub
,但我无法弄清楚如何使用通配符或反向引用。
我已经尝试弄乱VirtualDocumentRoot
,但我永远无法让devEx_<sub>
部分显示在DOCUMENT_ROOT
中以检查资源。
我尝试使用类似于此[mod_rewrite regex (too many redirects)]的解决方案,但它始终与REQUEST_URI
混淆。
我过去曾尝试使用过这样的东西:
RewriteCond $1 (^resources/.*)
RewriteCond %{DOCUMENT_ROOT}/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/override%{REQUEST_URI} [QSA,L]
RewriteCond $1 (^resources/.*)
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/main%{REQUEST_URI} [QSA,L]
另外,我真的很想了解更多使用Apache / Mod_rewrite,如果你有一个很好的技术指南或教程的建议,可以帮助我使用这个或一些调试技术(因为我不知道如何调试这些重写规则),我非常感谢知识所以请分享!
修改
关于我的试验的更多细节。
在我的VirtualDocumentRoot
解决方案中,我能够路由到正确的目录,但我无法将目录设置为文档根目录,以便执行覆盖规则。
对于此解决方案[mod_rewrite regex (too many redirects)],我将conf中的DocumentRoot
设置为/var/www
,并将以下行放在目录中的.htaccess
文件中
RewriteCond %{HTTP_HOST} ^dev-([^.]+)\.example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1 -d
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule .* /devEx_%1/$0 [L]
然而,正如您所料,这会将devEx_<sub>
附加到%{REQUEST_URI}
。
答案 0 :(得分:0)
为什么不将文档设为root / var / www /
这可能是您要做的最好的事情,具体取决于您提供的不在devEx
目录中的其他内容,因为这些内容需要重新路由。你想要的东西看起来像这样:
RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ /devEx_%1/override%{REQUEST_URI} [QSA,L]
RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteRule ^(.*)$ /devEx_%1/main%{REQUEST_URI} [QSA,L]
或者,您可以将%{DOCUMENT_ROOT}
的实例替换为/var/www
,尽管它有点难看,特别是如果您将网站移动到其他位置或更改服务器配置。因此你会得到这样的东西:
RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteCond /var/www/devEx_%1/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/www/devEx_%1/override%{REQUEST_URI} [QSA,L]
RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$
RewriteRule ^(.*)$ /var/www/devEx_%1/main%{REQUEST_URI} [QSA,L]