.htaccess - htaccess:通配符子域到所有域的同名子文件夹
问题描述
在我的 htaccess 中,我使用通配符将所有子域重定向到同名的子文件夹。但是我需要为我拥有的每个域添加这个。我想把这个压缩到自动为任何领域做。
我确实有这个用于删除 www。来自请求:
RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^(.*) http://%1/$1 [R,L]
我对子文件夹的通配符子域的规则是:
RewriteCond %{HTTP_HOST} ^((?!www\.)[^.]+)\.domain\.tld$
RewriteCond %1::%{REQUEST_URI} !^(.*?)::/\1/?
RewriteRule ^(.*)$ http://domain\.tld/%1/$1 [L,QSA]
注意 www 删除规则的工作方式,使用(.*)
和%1
代替 tld.. 使用相同的行为是行不通的,因为子域/子文件夹正在使用相同的行为。
有什么办法可以做到这一点?通过不对每个域重复此操作,它将极大地减少我的 htaccess。
编辑:好的,所以你可以有多个捕获组/正则表达式,虽然我很困惑如何让它工作。
还从这个页面找到了这个更整洁的版本,它去掉了第二个条件,以及 www 部分,因为我无论如何都删除了 www,所以从我能看到的内容来看并不重要。
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.tld
RewriteRule ^(.*)$ http://domain.tld/%1/$1 [L,NC,QSA]
编辑2:看起来我在这里有一个赢家。获取 www 删除条件并将其切换并了解您如何执行此操作的逻辑。
RewriteCond %{HTTP_HOST} ^([^.]+)\.(.*)
RewriteRule ^(.*) http://%2/%1/$1 [R,L]
编辑 3:这适用于除 1.. 一个 cz 域之外的每个域。它将域名切换为该死扩展的子文件夹,就像domain.cz
任何子cz/domain
域一样作为辅助子文件夹。老实说,我对此感到非常困惑。
解决方案
啊,我明白发生了什么。[^.]
匹配第一个点之前的任何内容,因此没有子,它会执行 tld,如果您有该 tld 的子,它会执行顶级域,然后是它的子,因此您最终以 /tld/sub 为这样我就看到了我的 cz 域。
我的主要域我指向了这个规则不存在的虚拟主机,我的别名域我已经指向了这个规则存在的虚拟主机,但是因为它们在这个规则之前被重定向到我的主要域..他们是没有被它抓住。
同时,我的 .cz 域我目前没有去任何地方,并且它指向与规则相同的虚拟主机,因此它被它抓住了。
我敢肯定,如果您想采用一种虚拟主机方法,我相信有人能够提出确保 tld 被忽略的正则表达式。但这只会增加复杂性,尤其是在有不同数量的扩展名(例如 .co.uk)的情况下和.com。而且,如果您只有一种虚拟主机方法,例如将域重定向到子文件夹站点..那么它们就不会被该正则表达式捕获,只要它高于此规则即可重定向您想要在 htaccess 底部的子程序。
所以它按预期工作,当我实际上按照我想要的方式设置我的域时,我到目前为止还没有为我的 cz 做这件事,哈哈。
所以这确实适用于这条规则。
RewriteCond %{HTTP_HOST} ^([^.]+)\.(.*)
RewriteRule ^(.*) http://%2/%1/$1 [R,L]
有点更新,我正在切换到 Nginx,所以对于所有想要这样做的 Nginx 用户,这里是你如何实现这一点的方法:
######## Wildcard * subdomain to subfolder of same name
server {
listen 80;
listen 443 ssl;
server_name ~^(?<sub>[^.]+)\.(?<domain>.*)$;
return 301 https://${domain}/${sub}$request_uri;
}
########
这太他妈简单了!
推荐阅读
- scala - 匹配有状态子类对象时,我可以避免在模式匹配中使用 asInstanceOf 吗?
- google-apps-script - 谷歌表格脚本不会为主题获得价值
- reactjs - React eslint 的意外行为
- reactjs - 当我使用 multer 删除帖子或包含它的结构时,如何删除图像?
- r - 用 R 中的列值替换整个数据框中的值
- google-smart-home - SYNC 后报告状态总是返回 404
- node.js - 找不到模块工作区/server.js
- python-3.x - 这个深度学习图像分类问题的目标应该是什么
- rest - 从浏览器调用 JSON Rest 服务
- laravel - Laravel 查询关系约束 - 注入变量