【问题标题】:Apache wildcard subdomains with url masking带有 url 掩码的 Apache 通配符子域
【发布时间】:2015-05-15 14:50:15
【问题描述】:

我正在尝试在 apache 中处理带有 url 掩码的通配符子域。 正确的重写规则应该达到以下几点:

http://demo.system.devto http://system.dev?subdomain=demo

http://sample.system.dev/user/edit/100to http://system.dev/user/edit/100?subdomain=sample

http://debug.system.dev/project/edit/newto http://system.dev/project/edit/new?subdomain=debug

到目前为止,我的 .htaccess 中有以下规则

RewriteCond %{HTTP_HOST} ^(.*)\.system\.dev
RewriteRule ^(.*?)$ http://system.dev%{REQUEST_URI}?subdomain=%1 [L]

它看起来工作正常,只是浏览器 url 也发生了变化。我希望浏览器 url 保持不变并在内部路由请求,但我不确定如何实现。

【问题讨论】:

  • @anubhava其实是同一个域,站点可用文件是一样的

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您不能在内部重写到另一个域。因此,当您转到子域时,它将重定向到您拥有的主域。因此,您将需要使用相对 URL 并查看它是否适合您。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^(www\.)?system\.dev [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.system\.dev [NC]
RewriteRule ^(.*)$ %{REQUEST_URI}?subdomain=%1 [L]

【讨论】:

  • 试过了,我不断收到 500 内部服务器错误消息“由于可能的配置错误,请求超出了 10 个内部重定向的限制。”,认为它可能在循环中重定向
  • 我添加了更多检查以使规则更加健壮。还要检查你的错误日志,看看它给出了什么信息。
  • 更改也无济于事,我不断收到 500 错误,apache 日志说“由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用'LogLevel debug'获取回溯。,referer:demo.system.dev/user/edit/100'
【解决方案2】:

在您的根 .htaccess 中尝试此规则:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !(?:^|&)subdomain= [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.system\.dev$ [NC]
RewriteRule (.*) $0?subdomain=%1 [L,QSA]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-11-12
  • 2014-02-28
  • 1970-01-01
  • 2014-07-05
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
相关资源
最近更新 更多