【问题标题】:Rewrite subdomain url to root domain url将子域 url 重写为根域 url
【发布时间】:2014-04-28 03:30:03
【问题描述】:

我使用以下规则将子域调用重写为网站根目录中的页面:

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]

RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9/_.-]+)\.domain\.com$ [NC]

RewriteRule .? headlines.php?url=%1 [L,QSA]

这很好用。我将它用于 rss - 新闻相关网站。例如:http://economy.headlines.com 将在内部查看http://www.headlines.com/headlines.php?url=economy

我还想通过以下方式链接到新闻项目: Economy.headlines.com/news/title/id

我该怎么做?因为每次第一个规则都被“解雇”。即使我使用 [L] 标志制定其他规则,也会触发其他规则并且什么也没发生。

如何将上述规则与新规则结合起来,这些新规则也可以查看站点根目录中的文件,但在 url 中带有参数?

【问题讨论】:

  • 传入请求中的id和title是如何指定的?
  • 喜欢/news/name-of-title/12,你是不是这个意思?我已经尝试了几件事来使用规则来处理这个问题,但我无法找到解决方案。

标签: .htaccess rewrite


【解决方案1】:

如果您评估您重写的请求的路径组件,您应该能够将两者结合起来:

Rewriteengine on
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9/_.-]+).domain.com$ [NC]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ headlines.php?url=%1&category=$1&title=$2&id=$3 [L,QSA]

可能您必须进行一些微调,但我想您明白了:RewriteRule 的第一个参数是一个正则表达式,它将请求路径拆分为其组件。这些可以使用$1$2 表示法来引用,您可以在规则末尾看到。


编辑:将类别参数添加到 RewriteRule,如下面的 cmets 中所述。

【讨论】:

  • 也许我应该发布实时 url,以便您查看:voetbal.nieuwsbreakdev.nlvoetbal.nieuwsbreakdev.nl/voetbal-nieuws/test/1,最后一个 url 给出的结果与其他规则未触发时相同。
  • 好的,这与您在上面发布的内容不同...voetbal-nieuws 是固定字符串还是必须在此处考虑的动态?
  • 抱歉误会。 voetbal-nieuws 是动态的(对于谷歌)也可以是经济的 nieuws 和 blabla-nieuws。感谢您的帮助
  • 那么我们有什么代币呢? /???/title/id,那么 ???这里?应该怎么交?
  • 那个???是 URL 中带有单词 news(荷兰语“nieuws”)的类别名称,用于告诉 google 它是哪种新闻。 /economy-nieuws/title/1
猜你喜欢
  • 2020-02-03
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多