关于 .htaccess:是否可以使用没有重定向(R 标志)的通配符创建子域?

Is possible make subdomains with wildcards without redirect (R flag)?

我认为我已经在我的域中配置了通配符,因为它对我有用:

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

但只有当我使用 R 或 R=301 标志重定向时。我想要一个虚拟子域,而用户不会注意到它。 subdomain.example.com 并且不要更改栏中的 url。

我已经尝试了下一个:

1
2
3
RewriteCond %{HTTP_HOST} !^www\\.example\\.com [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\\.example\\.com
RewriteRule ^(.*)$ http://www.example.com/member.php?username=%1 [L]

没有 R 标志。但我得到一个内部服务器错误。问题是什么?有人可以帮帮我吗?


如果没有重定向,您将无法重定向到绝对 url。

本文档中的

"Virtual user host" 部分解决了您的问题。

如果你的 user.example.com 和 www.example.com 指向同一台机器,那么

1
2
3
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteCond %{HTTP_HOST} ^([^.]+).example.com
   RewriteRule ^(.*)$      /member.php?username=%1 [L]

但是你打算如何处理 RewriteRule 中捕获的组

  • 你是对的,但 URL 也被重命名,用户可以看到更改。我只希望用户更容易使用网址。我不希望该用户看到将 nick.example.com 更改为 www.example.com/member.php?username=nick
  • 对不起,我写完后删除了评论。是以上。内部服务器不见了,你是对的。但是使用我的代码,url 不会改变,你的工作但是 url 会改变。您知道如何在不更改 url 的情况下进行重定向吗?
  • 启用重写日志并查看发生了什么,RewriteLog "/tmp/rewrite.log" RewriteLogLevel 9
  • 您能否尝试将条件从 .htaccess 移至 <VirtualHost> 上下文
  • 对不起,我不明白你的最后一条消息。关于 RewriteLog 我已经在 .htaccess 中尝试过它,但我得到了一个内部错误。也许我必须将其粘贴到其他站点。
  • 您可以将 RewriteLog 路径提供到与访问日志或错误日志相同的目录吗?
  • 是的,我可以,您正在谈论将其添加到 httpd.include 中。我已经完成了,但结果是在 .htaccess 中进行更改后,重写了内部错误的工作。并且发生同样的情况,网址正在改变。有没有不改变的方法?没有 R,URL 不能改变
  • 如果我获得 RewriteLogs 或您的 apache 服务器的整个配置,将能够检查发生了什么。重写不是小事,很多特殊情况。
  • 有用!你是对的,我的代码是错误的,你的代码是对的。使用我的代码,我有内部错误。昨天我再次阅读了我的虚拟主机的配置,我更换了 ServerAlias example.com -> ServerAlias www.example.com *.example.com 并在重新启动服务器后一切正常。真的很谢谢你。几个月前我尝试了很多代码。