【问题标题】:Use .htaccess to redirect virtual subdomains except for www使用 .htaccess 重定向除 www 之外的虚拟子域
【发布时间】:2023-04-10 23:58:01
【问题描述】:

我已经在使用 http.d 将所有非 www 流量(通过 301 重定向)驱动到网站的 www 版本。 IE。 example.com 重定向到 www.example.com。

这非常有效。

我现在想允许用户设置虚拟子域。因此,如果有人访问 bob.example.com,我希望 mod_rewrite 实际为页面 www.example.com/page.php?user=bob 提供服务。

由于我所有的 Google 历史记录都设置为索引网站的 www 版本,我不想丢失它,所以我希望排除 www。

感谢您的帮助。

【问题讨论】:

  • 老实说,我不想在子域下给他们一个完整的站点——基本上,只有一页。所以 file.php 不应该存在。如果设置了 bob.example.com,只需显示 page.php?user=bob。
  • 不,重定向会改变浏览器中的 url。正确的 mod_rewrite 应该让用户在浏览器中看到他们的 url,同时默默地提供正确的 url。经典的例子是:RewriteEngine onRewriteRule ^red.html$ blue.html 用户输入了 red.html,但看到了 blue.html 的内容——而且一点也不聪明。
  • 但只有在目标 URI 中不使用 http://... 更改 URL 中的域名时,才能进行重写。 bob.example.comwww.example.comDocumentRoot 值是否指向同一个目录?
  • 是的。我设置了虚拟通配符域,将其全部定向到服务器上的同一目录。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

您可以在 DOCUMENT_ROOT/.htaccess 文件中使用此规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.example\.com$ [NC]
RewriteRule ^ page.php?user=%1 [L,QSA]

【讨论】:

  • 是的,但我希望它是动态的。 bob.example.com、john.example.com、fred.example.com - 都分别重定向到 page.php?user=bob、?user=john、?user=fred。但是,我不想破坏 www.example.com。
  • 啊,太好了。此外,如果用户根本没有输入任何子域 - 即 example.com - 它应该正常运行(这是一个 301 重定向到 www.example.com),对吧?
  • 是的,没错,这条规则不会匹配www.example.comexample.com,所以www添加规则会像以前一样工作。
  • 似乎不起作用。粗鲁。也许我需要仔细检查 apache http.d 设置?
  • 这对我的 Apache 有效。要测试在RewriteRule 中添加R 标志为:RewriteRule ^ page.php?user=%1 [L,QSA,R]
猜你喜欢
  • 2015-08-29
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多