我一直在试图弄清楚这一点。如果这是一个重复的问题,我深表歉意,但我似乎找不到合适的解决方案。
我想要完成的是以下内容:
给定 URL dev-<sub>.example.com/resources/path/to/resource
,如果它产生一个文件或其他(我可以处理 404s)sub
,则转到。/var/www/devEx_<sub>/override/resources/path/to/resource
/var/www/devEx_<sub>/main/resources/path/to/resource
我可以找到一个手动添加每个人的解决方案,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) ],我将DocumentRoot
conf 中的设置为/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}