【问题标题】:Wildcard subdomain redirecting to a file通配符子域重定向到文件
【发布时间】:2015-11-06 22:42:01
【问题描述】:

我正在尝试将foo.bar.com 重定向到bar.com/foo.php,但我不知道从哪里开始,到目前为止,其他一切都让我失望了。我在 StackOverflow 上尝试了很多东西,但它们似乎都没有工作(只是各种 Apache 错误)。

我已经从 cPanel 设置了一个通配符子域,但我不确定从这里去哪里。 .htaccess 是不是最好的选择?

编辑:我还想将 URL 从 bar.com/foo.php 重写为 foo.bar.com

【问题讨论】:

  • 也许你应该让通配符子域重定向到类似bar.com/redirect.php?subdomain=foo,然后用PHP$_GET从那里做它
  • @MadsMarquart 嗯,是的,这可能是一个更好的方法。不过,我不知道如何在 .htaccess 中获取 $_GET 变量。

标签: php apache .htaccess


【解决方案1】:

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

RewriteEngine On

RewriteCond %{HTTP_HOST} !^(?:www\.)?domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.(.+)$ [NC]
RewriteRule ^/?$ http://%2/%1.php [L,R=302]

编辑:要隐藏重写的 URL(内部重写),请使用:

RewriteCond %{HTTP_HOST} !^(?:www\.)?domain\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(?!www\.)([^.]+)\.(.+)$ [NC]
RewriteRule ^/?$ %1.php [L]

【讨论】:

  • 这非常适合重定向,并且似乎几乎完全符合我的需求。但我实际上在我的回答中遗漏了一些东西。我还想重写 URL 以反映您在子域上而不是文件上。有没有办法做到这一点?
  • 谢谢!这适用于子域,但是当我真正尝试访问我的根 url 时,它给了我一个 404。
  • 通过根 url,我的意思是 foo.com 没有子域。
  • 啊好的,现在看看我更新的答案。它将跳过domain.comwww.domain.com,其中domain.com 是主域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2018-10-22
  • 2018-08-14
相关资源
最近更新 更多