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

l2osamch  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(131)

我在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>
5ssjco0h

5ssjco0h1#

从你的描述看,你似乎只需要删除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> Package 函数,应该将其移除。
无需重复RewriteEngine指令。
第一个规则中的%1反向引用包含从前面的 condition 中捕获的主机名,减去www.前缀。
注意:首先测试302(临时)重定向以避免潜在的缓存问题。在测试之前,您可能需要清除浏览器缓存。

lg40wkob

lg40wkob2#

你好。如果你需要访问subdomen**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>

相关问题