【问题标题】:Apache vHost mod_rewriteApache vHost mod_rewrite
【发布时间】:2017-04-01 02:47:33
【问题描述】:

我在 Apache 中有一个 vHost,我想将所有子域重写为子域 www.domain.tld,其中 tld 部分应该是用户输入的那个。

我已经看过mod_rewrite的文档,但至少我不明白:)我希望有人能解释给我。

我的 vHost-Config 中的实际部分如下,...但仅匹配子域问题,而不匹配 tld 问题:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^([a-z.]+)?domain\.de$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .? http://www.%1domain.de%{REQUEST_URI} [R=301,L]

但我不明白我的域之前的 %1...

【问题讨论】:

  • 您阅读过任何个文档吗?
  • 是的,我确实做到了,现在理解 %1 重写应该是 RewriteCond %{HTTP_HOST} !^www.domain.de$ [NC] RewriteRule .? www.domain.de%{REQUEST_URI} [R=301, L] 但这根本不能解决我的问题... - 我想为 4 个域重写它,有另一个结尾.我是否应该为每个域都写这个,或者我可以在一个规则中接受这个,......以及如何?没有找到任何东西:/
  • 你有同样的问题,超过 90% 的人使用这个标签,正则表达式有困难。我敢肯定,很多人从来没有找到他们确切的问题,但相似之处无处不在。把你的问题分解成更小的部分。您可以使用 % 反向引用捕获 tld。 domain 总是完全相同吗?捕捉它,也是。您还需要处理没有子域吗? (可能。)可能有两行;再来一次。此外,大块代码应该是对您的问题的编辑。

标签: mod-rewrite apache2


【解决方案1】:
RewriteCond %{HTTP_HOST} ^(?!www\.)(?:[^.]+\.)?(domain\.[^.]+)$ [NC]
RewriteRule .* http://www.%1/$0 [R=301,L]

重定向所有请求,其中子域不是 www,具有 0 或 1 个 sudomain 级别,域是 domain 并且具有 tld 级别。如果您还需要,比如.co.uk,则需要对其进行修改。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 2015-10-23
    • 2014-10-18
    • 2016-01-16
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多