【问题标题】:mod rewrite exploding %{HTTP_HOST}mod重写爆炸%{HTTP_HOST}
【发布时间】:2013-07-02 10:03:11
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 完美,这正是我正在寻找的语法。谢谢阿卡农
    • 此外,对于其他想要做类似事情的人,我使用上述过程设置了一个环境变量,我可以在随后的重写规则中使用它(所以我没有多个条件) . RewriteRule .? - [E=Wp:%1]RewriteRule ^wp-admin(.*) wordpress/%{ENV:Wp}/wp-admin$1 [L]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 2011-04-23
    • 2011-10-05
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多