0

我一直在试图弄清楚这一点。如果这是一个重复的问题,我深表歉意,但我似乎找不到合适的解决方案。

我想要完成的是以下内容:

给定 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) ],我将DocumentRootconf 中的设置为/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}

4

1 回答 1

0

你为什么不让你的文档根目录 /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]
于 2012-07-02T19:02:56.520 回答