1

我有一个我以前没有遇到过的情况,它需要一些有趣的 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 )

任何有关实现此目的或更好方法的建议将不胜感激。

4

1 回答 1

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 捕获的模式的反向引用,您应该很容易使用它来获得您需要的效果.

于 2013-07-02T12:45:11.497 回答