.htaccess - 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 但我找不到让它工作的方法。如果有人有提示,那将非常有帮助。
谢谢!
解决方案
这将从任何传入请求中捕获“子域名”并将其作为查询参数添加到内部重写的目标中:
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”),但这有一些缺点。
推荐阅读
- azure - Azure BICEP 部署(如果尚不存在)
- r - 将 5 分钟盘中价格转换为每日价格
- ruby-on-rails - 如何根据另一个数组规范对对象进行排序
- python - 如何在实时屏幕上实时覆盖实时更新对象?
- docusignapi - 通过仅发送模板的少量文档在 docusign api 中发送设计请求
- image - PdfSharp 图像过滤器是空字符串
- dart - 可以在不中断导入的情况下重命名本地 Dart 依赖项的“lib”目录吗?
- python - 为什么没有加载静态文件?| 姜戈
- python - Python/sqlalchemy/运行 SQL 后获取列名
- javascript - Looping over objects to add property not working (Javascript with Mongodb)