我尝试了几种解决方案,但似乎都没有。我有一个Laravel应用程序(公共文件夹被删除),我想将用户重定向到HTTPS和我的网站的非www版本 这是我想要完成的动作的一个例子
我能够在htaccess
上使用以下代码完成此操作RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example.com$ [NC]
RewriteRule (.*) https://example.com [R=301,L]
现在,由于网站有很多链接,我想重定向用户,而不会丢失域后的任何文本。这是一个例子
我使用$和request_uri尝试了很多变体,但它们仍然会重定向到https://example.com/index.php。在这里搜索答案后,我尝试的最后一件事看起来像是这样,产生了相同的结果
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%1%{REQUEST_URI} [L,R=301,NE]
这似乎会将https://www.example.com/string1/string2/string3的所有流量重定向到https://example.com/index.php
那么我如何才能按预期重定向流量,这是一种更好的做法。编写两个规则或使用If语句组合规则。
我想只使用htaccess方法,没有中间件。
答案 0 :(得分:0)
要将www请求重定向到非www而不丢失路径或查询字符串,这是正确的格式:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) https://example.com/$1 [R=301,L]
如果您的网站位于没有反向代理的服务器上,您可以轻松地将非HTTPS请求重定向到HTTPS,如下所示:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
如果存在反向代理或负载均衡器,则需要检查转发的标头,具体取决于代理配置(例如X-Forwared-Proto
)
答案 1 :(得分:0)
试试这个
# Redirect from http to https
RewriteEngine on
# Redirect to HTTPS
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# (http://www.example.com/foo will be redirected to http://example.com/foo)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
# to redirect index.php to the root
RewriteCond %{THE_REQUEST} ^.*/index\.php
RewriteRule ^(.*)index.php$ /$1 [R=301,L]
答案 2 :(得分:0)
我遇到了同样的问题
您应该在
之后将此代码放在.htaccsee文件之上RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://yourdoamin.com%{REQUEST_URI} [L,R=301,NC]
如果你把它放在
之后 # Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
您的网页重定向到yourdomain.com/index.php
答案 3 :(得分:0)
我遇到了同样的问题
您应该在
之后将此代码放在.htaccsee文件之上RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://yourdoamin.com%{REQUEST_URI} [L,R=301,NC]
如果你把它放在
之后# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
您的网页重定向到yourdomain.com/index.php
答案 4 :(得分:0)
花了几个小时在网上搜索并测试了不同的建议之后,我找到了解决方案。
.htaccess在public_html中
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
.htaccess在公用文件夹中
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Redirect to https
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R,L]
# Redirect to non www
RewriteCond %{HTTP_HOST} ^www.yourdomain.com$ [NC]
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R=301,L]
# 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]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# This made the trick for me
# Remove index.php from the url
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]
</IfModule>
我希望这也会对其他人有用