繁体   English   中英

如何使用 laravel htaccess 将 www 重定向到主域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM