我一直试图弄清楚这一点。我很抱歉,如果这是一个重复的问题,但我似乎无法找到合适的解决方案。Apache Mod_rewrite改变目录
我试图做到的是以下几点:
给出的URL 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}
,如你会期待的。
这些规则似乎是在正确的方向 - 他们不工作? – Ansari
您不希望'%{DOCUMENT_ROOT}/path1%{REQUEST_URI}'为'%{DOCUMENT_ROOT}/override%{REQUEST_URI}'? –
@Jon编辑翻译错误。 – sgcharlie