我想将每个请求从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地址?
答案 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]
使用=
运算符,检查字典相等,即。不是正则表达式,所以不需要逃脱这些点。
但是,这可以合并为一个更紧凑的单一规则集。例如:
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地址,则重定向...