我在.htaccess文件中有此文件: >我该如何纠正它以便将其正确重定向到http://example.com/robots.txt

#1 楼

将您的配置更改为此(添加斜线): br />
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule (.*) http://www.example.com/ [R=301,L] 


如果需要支持http和https并保留协议选择,请尝试以下操作:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]


替换login的位置使用checkout.php或支持HTTPS所需的任何URL。

我认为这不是一个好主意。对于推理,请阅读此答案。

评论


当某些页面(例如登录或注册)使用https协议时,此解决方案不起作用。

–阿列克谢·科索夫(Alexey Kosov)
2014年11月27日7:47

我已对该帖子进行了小幅更新,以包含一些信息。通用和正确选择要使用的协议都很困难。

–兰德尔·亨特(Randall Hunt)
2014年11月28日在8:12

第一个解决方案重定向不够,第二个似乎重定向太多。例如,blog.example.com变成www.blog.example.com

– gman
2015年6月5日在10:02

您还可以添加在本地主机上开发时如何避免重定向的方法吗?

–Bugs Bunny
15-10-25在18:42

香港专业教育学院一直在这里的一切,但没有任何工作。我正在使用laravel设置。有谁知道为什么这对我不起作用? www.domain.com和domain.com都可以正确加载,但是domain.com不会重定向到www.domain.com。这可能是我的DNS问题吗?

– Hello world
16年4月4日在3:40

#2 楼

这是支持https和http的正确解决方案:

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


评论


这是完美的,它也不会像其他通用解决方案一样将子域重定向到www。

–法比安·施蒙格勒(Fabian Schmengler)
2015年4月7日在9:10

这是最佳解决方案,比公认的答案要好得多,并且可以正确处理HTTPS

–塔米克·索齐耶夫(Tamik Soziev)
2015年6月9日在8:51

完美的作品!在这么几行中!

–zeckdude
2015年11月29日,下午3:19

这是最好的答案

–安德鲁(Andrew)
15年12月13日在21:57

如果我没记错的话,这将不止一个点。范例:yoursite.co.uk

– TrashyMcTrash
16年1月12日在14:02

#3 楼

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]


用于Https

RewriteCond %{HTTPS}s ^on(s)|

RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/ [R=301,L]


评论


此解决方案优于@ranman的解决方案,因为它适用于所有领域,从而可以在为新项目实现代码或为现有项目实现额外域时将人为错误降至最低。

–弗兰基
14年8月20日在15:16

我更喜欢这种解决方案,但是为什么用^(。*)$代替(。*)?

–Popnoodles
2014年9月8日于17:03

这个解决方案更好,但是我也编辑了我的包含的内容。

–兰德尔·亨特(Randall Hunt)
2014年11月4日,0:59

这对于所有领域都是简单有效的!谢谢

– eirenaios
15年3月25日在6:41

您可以关注RewriteCond%{HTTPS} s ^ on(s)| RewriteRule ^ http%1://www.% {HTTP_HOST} / $ 1 [R = 301,L]

–absiddiqueLive
2015年9月20日下午5:59

#4 楼

以下示例在ssl和非ssl上均适用,并且仅使用一条规则来管理http和https即可更快。
这将重定向

http


http://example.com




http://www.example.com

https


https://example.com




https://www.example.com


评论


非常接近我的想法。 HTTP主机中也支持多个点,例如“ mysite.co.uk”。

–金刚豆
16年7月7日在11:58

出于好奇,您为什么不在这里使用R = 301?如果未指定代码,则默认情况下将使用302(移动温度)。

–马克
16年4月4日在20:44

完美运作。这应该是公认的答案。

–詹姆斯·尼贝特(James Nisbet)
18-09-29在22:20

#5 楼

试试吧,我在很多网站上都用过它,效果很好

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/  [QSA,L,R=301]


#6 楼

我已经测试了上述所有解决方案,但对我不起作用,我尝试删除了http://,并且也不会将重定向的www也很好地删除了,所以我很困惑,特别是我在https下运行所有​​站点://

所以我将一些代码组合在一起,并为http://和https://以及www和非www提出了完美的解决方案。

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/ [R=301,L]
</IfModule>


希望这可以帮助某人:)

#7 楼

在.htaccess文件中添加以下代码。

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]


URL重定向教程可在此处找到-使用.htaccess文件将非www重定向到www&HTTP到HTTPS

#8 楼

此配置在配置了SSL的bitnami wordpress中对我有用:

在/opt/bitnami/apps/wordpress/conf/httpd-app.conf
中的“ RewriteEngine On”下添加了以下内容
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


#9 楼

RewriteCond %{HTTP_HOST} !^www\.domain\.com [NC]
RewriteRule (.*) http://www.domain.com/ [L,R=301]


这将重定向不是以WWW开头的域
,这不是重定向所有子域。

这很有用。

#10 楼

我认为最佳答案可以成功地将非www重定向到www(例如:mysite.com-> www.mysite.com),但没有考虑通配符子域,从而导致:

random.mysite.com -> www.random.mysite.com


这里是带有/不带有HTTPS的解决方案

HTTP

RewriteEngine On

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/ [L,R=301] 


HTTP / HTTPS

/>
RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/ [L,R=301]


*注:我尚未测试https,因为我目前没有要测试的证书,但是如果有人可以验证或优化我所拥有的证书,那将非常棒。 >

评论


第一个$在这里做什么:'^(。*)$'

–Vaishal Patel
18-6-29在6:37



#11 楼

如果可能,将其添加到主Apache配置文件中。这是一种重量更轻的解决方案,所需的处理更少。主VirtualHost。因此,没有REGEX解析每个请求,并且您的客户端浏览器将缓存重定向,因此它们再也不会(或很少)再次请求“错误”网址,从而节省了服务器负载。 VirtualHost中的尾部斜杠。
没有它,从Redirect permanent / http://www.example.com/重定向将重定向到example.com/asdf而不是http://www.example.comasdf

#12 楼

有两个警告
避免使用301,而是使用现代的303或307响应状态代码。
避免使用301
请仔细考虑是否确实需要表示为[R=301]的永久重定向,因为如果以后决定更改它,则页面的先前访问者将继续看到原始重定向的页面。
永久重定向信息通常存储在浏览器的缓存中,通常很难消除(重新加载页面无法解决问题)问题)。您的网站访问者将被困在以前的重定向“永远”中。
也避免使用302
新版本的HTTP协议(v1.1)添加了两个新的响应状态代码,可以代替302 。


303 URL重定向,但要求将请求的类型更改为


307 URL重定向,但要求保留请求的类型按最初发送的方式进行。无论如何,大多数浏览器都以新的302代码指示的方式实现302

评论


关于您有关301的警告,即使我们在谈论相同的域名,这也将适用吗?不确定在这种情况下如何应用...将所有URL从http://example.com/testing重定向到http://www.example.com/testing。从长远来看,这可能是一个坏方法吗?谢谢,

– Sara_
18年7月23日在16:41



#13 楼

用.htaccess编写:)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]


评论


与其他答案相同

– Ankit
17年6月2日在9:29