首页 > 解决方案 > htaccess - 在子域中转换获取参数值

问题描述

在我的 Web 应用程序中,我目前有这样的 URL:

https://example.com/mypage?company=companyname&otherparameter=othervalue&...

我想以这种方式转换上面的 URL:

https://companyname.example.com/mypage?otherparameter=othervalue&...

所以基本上GET 参数“company”的值转换为子域,同时保留URL 中的其他 GET 参数(并且显然还保留服务器上文件的路径)。

我还需要从这条规则中排除“/api”目录(因此“/api”子目录下的所有文件都应该照常提供)。

我知道我需要使用 .htaccess 但我找不到让它工作的方法。如果有人有提示,那将非常有帮助。

谢谢!

标签: .htaccessredirect

解决方案


这将从任何传入请求中捕获“子域名”并将其作为查询参数添加到内部重写的目标中:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^(?:www\.)?example\.com$
RewriteCond %{HTTP_HOST} !^([^.]+)?example\.com$
RewriteCond %{REQUEST_URI} !^/api/?
RewriteRule ^ %{REQUEST_URI}?company=%1 [QSA,L]

这将负责处理传入的请求。这不会某种方式神奇地更改您分发的引用,例如嵌入在 HTML 标记或 javascript 中的链接。

您需要确保您的 http 服务器实际响应对那些基于“子域”的主机名的请求。默认虚拟主机通常用于此类事情。您还需要注意此类名称的 DNS 解析是否有效并指向您的 http 服务器。最后,您必须为所有这些主机名提供有效的 SSL 证书。通配符证书是这里的一个选项,但与不是免费提供的普通证书不同。

在您的 http 服务器的实际主机配置中实现此类通用规则是一个好主意。您可以为此使用分布式配置文件(“.htaccess”),但这有一些缺点。


推荐阅读