.htaccess - htaccess 不允许重定向特定的子域
问题描述
我重定向所有虚拟子域如下。
RewriteCond %{HTTP_HOST} ^(.+)\.mysite\.com$
RewriteRule ^$ subdomain.php?url=%1 [NC,QSA,L]
这样,我从数据库中获取数据。所有“虚拟子域”。但是有一个真正的子域。Opencart 里面 (shop.mysite.com)
htaccess 也指导这一点。如何防止它仅重定向“商店”一词。
我的完整代码:
Options Indexes SymLinksIfOwnerMatch
RewriteEngine on
directoryindex index.php
Options -indexes
RewriteRule index index.php
RewriteCond %{HTTP_HOST} ^(.+)\.mysite\.com$
RewriteRule ^$ subdomain.php?url=%1 [NC,QSA,L]
# www.site.com >> site.com
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
解决方案
RewriteCond %{HTTP_HOST} ^(.+)\.mysite\.com$ RewriteRule ^$ subdomain.php?url=%1 [NC,QSA,L]
您可以添加另一个条件来排除shop
子域。例如:
RewriteCond %{HTTP_HOST} !^shop\.
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
RewriteRule ^$ subdomain.php?url=%1 [QSA,L]
!
前缀否定正则表达式,因此当不匹配时条件成功。
或者,您可以在原始条件正则表达式中使用负前瞻。例如:
RewriteCond %{HTTP_HOST} ^((?!shop\.).+)\.example\.com$
RewriteRule ^$ subdomain.php?url=%1 [QSA,L]
但是,您的指令也是错误的顺序。您删除www
子域的外部重定向应该首先出现,否则您需要将另一个例外合并到上述规则中。
例如:
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
RewriteEngine on
RewriteRule index index.php
# www.site.com >> site.com
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^shop\.
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$
RewriteRule ^$ subdomain.php?url=%1 [QSA,L]
您还添加了该Indexes
选项,只是为了使用稍后的指令再次删除它。
推荐阅读
- javascript - 如何让 JavaScript 事件监听器检测动态添加的复选框事件
- nestjs - 在 Guard 中访问请求的原始正文?
- c# - 如何在 xamarin 中以离线模式使用 Firebase?
- javascript - 无法在不同的域上设置 cookie
- ios - react-native 警报错误“尝试呈现 UIAlertController
- html - 列和网格的响应式 flexbox 列表
- javascript - 如何将字符串转换为数字javascript
- bootstrap-4 - 使用 Bootstrap 4 在导航栏中创建切换搜索框
- regex - 正则表达式测试函数。可视化代码
- c - 是否允许在分配的内存区域中以非 sizeof 偏移量创建对象?