301重定向无法正常工作

时间:2016-08-09 22:54:54

标签: .htaccess redirect

我想将每个请求从http://重定向到https://,从www.example.com重定向到example.com。此外,从IP地址到https://example.com的重定向将非常棒。

我设法将http://请求重定向到https://但不幸的是,我总是因为将www重定向到非www网站而失败。

这是我的代码

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

任何想法为什么它不起作用。如何正确重定向IP地址?

1 个答案:

答案 0 :(得分:1)

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

HTTP_HOST实际上只是主机名,而不是主机名加路径(即/foo2)。您在评论中提到网站(和.htaccess文件)位于子目录(/foo2)中,因此类似以下内容就足够了:

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule (.*) https://example.com/foo2/$1 [L,R=301]

上述条件指出,如果HTTP_HOST启动www.,则重定向。

  

从IP地址到https://example.com的重定向会非常棒。

如上所述,您只需要检查HTTP_HOST的IP地址即可。例如:

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

使用=运算符,检查字典相等,即。不是正则表达式,所以不需要逃脱这些点。

所有3个实例的组合规则......

但是,这可以合并为一个更紧凑的单一规则集。例如:

RewriteEngine On
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\. [OR,NC]
RewriteCond %{HTTP_HOST} =123.123.123.123
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

如果请求不是 HTTPS,或以www.开头,或者是服务器的IP地址,则重定向...