mod重写爆炸%{HTTP_HOST}

时间:2013-07-02 10:03:11

标签: wordpress apache redirect mod-rewrite url-rewriting

我有一种情况,我之前没有遇到过需要一些有趣的mod_rewrite规则,我找不到任何人试图在类似的配置中实现同样的事情的例子。

目前我有两个域名配置为共享同一个文档根目录,在所述文档根目录中是一个动态php应用程序,它基于传入的主机名,显示特定于该域的内容。

出于示例目的,域名为:

www.example1.com

www.example2.co.uk

(一个是TLD,另一个不是)

除了这个应用程序,还有两个wordpress安装,分别用于两个域名。由于我们在这里没有使用wordpress MU,我需要一些花哨的重写来首先隐藏wordrpess文件夹,然后根据HTTP_HOST将请求呈现给正确的文件夹。

目前我有以下内容:

RewriteRule ^wp-content(.*) wordpress/example1$1 [L]
RewriteRule ^wp-admin(.*) wordpress/example1/wp-admin$1 [L]
RewriteRule ^wp-login.php$ wordpress/example1/wp-login.php [L,R=301]

内容特定页面的类似规则。

这适用于单个wordpress安装,但显然不适用于第二个,我希望在这里做的事情如下:

RewriteRule ^wp-admin(.*) wordpress/${HTTP_HOST}/wp-admin$1 [L]

但是我需要删除www。和.com来自$ {HTTP_HOST}变量(或www。和.co.uk)

任何关于实现这一目标或更好方法的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用RewriteCond检查HTTP_HOST中的模式,然后捕获该模式的一部分。

例如:

RewriteCond %{HTTP_HOST} ^(?:www\.)?([a-zA-Z0-9_-]+)\.(?:com|co\.uk)$
RewriteRule ^wp-admin(.*) wordpress/%1/wp-admin$1 [L]

上面的RewriteCond指令检查HTTP_HOST是否适合以“.com”或“.co.uk”结尾的域模式,并可选择以“www。”开头。如果是,它会捕获域名的有趣部分。

然后RewriteRule(只有在RewriteCond匹配时才触发)能够通过使用%1反向引用来引用RewriteCond模式的捕获部分。

我在上面的RewriteCond中使用的模式可能不能完全满足您的需求,但是一旦您知道可以使用RewriteCond捕获的模式的反向引用,您应该很容易使用它来获取你需要的效果。