[英]Yii:: redirect www.domain.com/index.php to www.domain.com without using htaccess
[英]how to redirect www to main domain using laravel htaccess
我在 laravel 中有单独的子域。 我想当有人访问: www.shawn.com它会自动重定向到shawn.com但如果有人访问hello.shawn.com可以访问。
但如果另一个人访问www.hello.shawn.com它将重定向到hello.shawn.com我已经管理 htaccess 来访问它,但它不能正常工作。
这是我的htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} ^(www\.)?shawn\.com
RewriteRule ^(.*)$ https://www.shawn.com/$1 [R,L]
</IfModule>
萨拉姆。 如果您需要访问子域www.hello.shawn.com那么您必须再次编写此语句。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.hello\.shawn\.com
RewriteRule ^(.*)$ https://hello.shawn.com/$1 [R,L]
</IfModule>
根据您的描述,您似乎只需要在请求的任何主机名上删除www
子域。 显然www
子域当前必须解析到同一个地方。
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTP_HOST} ^(www\.)?shawn\.com RewriteRule ^(.*)$ https://www.shawn.com/$1 [R,L] </IfModule>
您当前的指令顺序错误。 我假设您必须在/public
子目录中有另一个.htaccess
文件(通过 Laravel 前控制器进行实际路由)? 在这种情况下,第二条规则(将 HTTP 重定向到 HTTPS+www)永远不会被处理 - 确实如此,因为这会暴露/public
子目录(可能从 URL 中隐藏)并且似乎与您的相反正在努力实现(即删除www)。
请尝试以下操作:
RewriteEngine On
# Remove "www" subdomain from any hostname
RewriteCond %{HTTP_HOST} ^www\.(.+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# HTTP to HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Rewrite everything to the "/public" subdirectory
RewriteRule (.*) public/$1 [L]
<IfModule>
包装器不是必需的,应将其删除。
无需重复RewriteEngine
指令。
第一条规则中的%1
反向引用包含主机名,减去www.
前缀,从前面的条件中捕获。
注意:首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。 在测试之前,您可能需要清除浏览器缓存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.