如何在.htaccess文件中写一个if - else if - else if条件块?

时间:2011-10-18 20:51:29

标签: apache .htaccess mod-rewrite conditional

这就是我想用伪代码完成的事情:

if server.host equals 'productionsite.com' then
  RewriteBase /
else if server.host equals 'stagingsite.com' then
  RewriteBase /staging/mysite
else if server.host equals 'localhost' or server.host equals '127.0.0.1' then
  Rewrite /dev/mysite

然而,到目前为止,这实际上并没有像我期望的那样起作用:

RewriteCond %{HTTP_HOST} =productionsite.com
RewriteBase /

RewriteCond %{HTTP_HOST} =stagingsite.com
RewriteBase /staging/mysite

RewriteCond %{HTTP_HOST} =localhost
RewriteBase /dev/mysite

我感谢您提前得到的任何帮助。

2 个答案:

答案 0 :(得分:1)

本身不是答案(最初是评论),但可能对您有所帮助:

您的方法不起作用,因为RewriteBase不受RewriteCond指令的影响。 RewriteCond只能跟随另一个RewriteCond或RewriteRule。 RewriteBase是一个完全不同的野兽:我不认为有条件的RewriteBase是可能的;我有一种模糊的感觉,它是在启动时处理的,因此无法动态更改(但我可能对此非常不对)。 Google对“条件重写库”有很多点击,你可以看一下这些,但它们看起来很不利。

IfDefine玩弄以获得类似的效果值得一试。

或者,您可以尝试使用RewriteRules和环境变量:

 RewriteBase /

 RewriteCond %{HTTP_HOST} =stagingsite.com
 RewriteRule ^ - [E=FRB:/staging/mysite]

 RewriteCond %{HTTP_HOST} =localhost
 RewriteRule ^ - [E=FRB:/dev/mysite]

然后在每个重写路径前加上FRB环境变量,如

 RewriteRule ^home$ %{ENV:FRB}/index.php

但这只是一个未经检验的理论。

答案 1 :(得分:0)

对我来说,https://snipt.net/beat/htaccess-different-bases-subfolders-in-developmentproduction/的解决方案正常工作

RewriteCond %{HTTP_HOST} !^localhost$
RewriteRule . - [E=REWRITEBASE:/prod/]

RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule . - [E=REWRITEBASE:/dev/]