如果请求uri = /我想让请求
GET / HTTP/1.1\r\n Host: www.example.com\r\n Accept: */*\r\n Content-Type: text/html\r\n Proxy-Connection: Keep-Alive\r\n Content-length: 0\r\n \r\n
但如果请求uri以http:// [OR] https://开头
GET http://www.baidu.com/ HTTP/1.1\r\n Host: www.baidu.com\r\n Accept: */*\r\n Content-Type: text/html\r\n Proxy-Connection: Keep-Alive\r\n Content-length: 0\r\n \r\n
我想301redirect到请求的uri(在本例中redirect到www.baidu.com)
我已经在我的.htaccess中试过了
RewriteEngine On RewriteCond %{REQUEST_URI} ^http://$ RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L] RewriteCond %{REQUEST_URI} ^https://$ RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]
但是当我试图访问www.example.com时,它进入了一个redirect循环
尝试以下操作:
RewriteEngine On RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ https?://[^\ ]+ HTTP/ [NC] RewriteRule ^ %{REQUEST_URI} [R=301,L]
其中THE_REQUEST服务器variables是初始请求标头。 例如:
GET http://www.baidu.com/ HTTP/1.1
但是,我怀疑这是否行得通,甚至是否可行。 您本质上是redirect到相同的URL (潜在的redirect循环),回到已经构build这个畸形的请求的用户代理。 如果甚至发生redirect(因为URLpath实际上没有改变),那么相同的用户代理可能构build相同的格式错误的请求(?)。
我认为你最好拒绝在你的服务器configuration这种畸形的请求,因为我无法想象它们是合法的请求呢? 例如:
RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ https?://[^\ ]+ HTTP/ [NC] RewriteRule ^ - [F]
虽然有可能比使用mod_rewrite更好的方法。
可能用这个解决了这个问题
RewriteEngine On RewriteCond %{THE_REQUEST} http:// [NC] RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L] RewriteCond %{THE_REQUEST} https:// [NC] RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]