重定向(www、非 www、http 和 https)不适用于子页面

问题描述 投票:0回答:1

我有一个 Laravel 项目,我正在尝试使用 .htaccess 重定向页面。我想要的只是 www、非 www 和 http 应该被重定向到 https,它也应该适用于子页面。 它适用于主页 example.com,例如 http://www,只有 www,只有 http 所有重定向到 https。

但是对于子页面,是不行的。例如 example.com/abc 不起作用。 对于 http://www 和 https://www,它使用 https 而不是 homepage/abc

重定向到 homepage/index.php

如果我仅提供域名/abc 或域名/abc 以及仅 http,abc 页面打开但带有非安全标志,尽管我安装了 SSL。

只有 www 前缀,它才有效,重定向到 https://example.com/abc

对不起,我不能写完整的网址,因为它不允许我发帖说可能是垃圾邮件。

我正在使用 Laravel。有一个 cPanel 301 重定向记录添加了“带或不带 www 的重定向”,通配符重定向被选中,域 - example.com,目录 /,重定向 url - https://example.com。 .htaccess 如下:

选项 -MultiViews -Indexes
RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

#redirect
RewriteCond %{HTTP_HOST} !^example.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

我检查了堆栈溢出,使用了 .htaccess 代码,但它们都适用于家庭,但不适用于子页面。 我曾尝试使用各种选项更改 .htacces,但没有成功。这是我能做的最合适的,至少它适用于主页。

我需要的是它应该重定向到带有域名或域名/abc 的 https,其中“abc”是 Laravel 控制器方法,无论 www、http、https 或没有 www。

任何帮助将不胜感激。谢谢。

apache .htaccess redirect laravel-8
1个回答
2
投票
#redirect
RewriteCond %{HTTP_HOST} !^example.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

你把重定向规则放在了错误的地方。这需要放在

.htaccess
的顶部,在现有规则之前,而不是最后。通过将规则放在文件末尾,任何“子页面”都将被重定向到
index.php
,因为前面的规则首先在内部将“子页面”重写为前端控制器(
index.php
)。只有重写 URL 后才会发生重定向(到重写的 URL)。 (根目录/主页的请求不会被这条规则改写。)

.htaccess
文件中指令的顺序可能很重要。

但是,此规则检查

HTTP_HOST
服务器变量(即请求的 HTTP
Host
标头的值)是 not
example.com
。所以很自然地,它不会仅重定向对
example.com
(+ HTTP)的请求。

.htaccess 文件的

top
处尝试以下操作:

#redirect
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule (.*) https://example.com/$1 [R=301,L]

这会检查

HTTPS
off
OR
HTTP_HOST
不是
example.com
(不是文字点应该反斜杠转义)。请注意,
^
pattern
上的锚点
$
RewriteRule 不是必需的,因为默认情况下正则表达式是贪婪的。

注意:首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。

© www.soinside.com 2019 - 2024. All rights reserved.