我有一个 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 -IndexesRewriteEngine 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。
任何帮助将不胜感激。谢谢。
#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(临时)重定向进行测试,以避免潜在的缓存问题。