.htaccess 在谷歌搜索结果中点击我的网页会将我重定向回谷歌

.htaccess 在谷歌搜索结果中点击我的网页会将我重定向回谷歌,.htaccess,google-chrome,redirect,.htaccess,Google Chrome,Redirect,我在一个网站上帮助一个朋友,这个网站是使用plesk提供的在线平台创建的,当试图通过谷歌访问这个网站时,出现了一个问题 直接在浏览器中写入域很好,但通过谷歌搜索访问域时,会将用户重定向回谷歌 可能是什么问题 这是我的.htaccess文件 <IfModule mod_negotiation.c> Options -MultiViews </IfModule> <IfModule mod_rewrite.c> RewriteEngine On

我在一个网站上帮助一个朋友,这个网站是使用plesk提供的在线平台创建的,当试图通过谷歌访问这个网站时,出现了一个问题

直接在浏览器中写入域很好,但通过谷歌搜索访问域时,会将用户重定向回谷歌

可能是什么问题

这是我的.htaccess文件

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    #HTTP-HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://srad.wtf/es_ES/$1 [R=301,L,QSA]

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    # Sets the HTTP_AUTHORIZATION header removed by Apache
    RewriteCond %{HTTP:Authorization} .
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ - [L]

    # Rewrite all other queries to the front controller.
    RewriteRule ^ %{ENV:BASE}/index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the start page to the front controller explicitly so that the website
        # and the generated links can still be used.
        RedirectMatch 307 ^/$ /index.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>

选项-多视图
重新启动发动机
#HTTP-HTTPS
重写条件%{HTTPS}关闭
重写规则(.*)https://srad.wtf/es_ES/$1[R=301,L,QSA]
RewriteCond%{REQUEST_URI}:$1^(/.+)/(.*):\2$
重写规则^(.*)-[E=基:%1]
#设置Apache删除的HTTP_授权头
RewriteCond%{HTTP:Authorization}。
重写规则^-[E=HTTP\U授权:%{HTTP:AUTHORIZATION}]
RewriteCond%{ENV:REDIRECT_STATUS}^$
重写规则^index\.php(?:/(.*)|$)%{ENV:BASE}/$1[R=301,L]
#如果请求的文件名存在,只需提供它即可。
#我们只想让Apache服务于文件,而不是目录。
RewriteCond%{REQUEST_FILENAME}-f
重写规则^-[L]
#将所有其他查询重写到前端控制器。
重写规则^%{ENV:BASE}/index.php[L]
#当mod_rewrite不可用时,我们指示临时重定向
#将起始页显式地发送到前端控制器,以便网站
#生成的链接仍然可以使用。
重定向匹配307^/$/index.php/
#不能改为使用RedirectTemp

我从文件中删除了大部分注释以保持其干净

如注释中所述,您的
.htaccess
文件中似乎没有任何内容会导致此重定向

重定向响应。。。似乎来自Nginx服务器(可能是前端代理),而不是Apache


@怀特先生,这是不是意味着这是我自己无法解决的问题

Nginx服务器是您的服务器配置的一部分,响应最终由它/通过它(我怀疑是一个前端/缓存代理)提供,因此您希望能够对此进行一些控制,尽管“使用在线平台”可能不会

但是,您看到的重定向可能来自您的应用程序服务器/PHP(而不是Nginx或Apache)。问题不仅仅在于“谷歌浏览器”(正如您所标记的)甚至谷歌浏览器。任何指向主页的入站链接都将被302重定向回自身(HTTP引用器)

不想听起来很吓人,但这种重定向是被黑客攻击的网站的典型特征,因为它可能会对SEO造成损害。虽然这只会影响主页,是一个302(临时)重定向,并且应用程序逻辑中似乎有其他特定于语言的重定向,但这可能只是一个错误的配置-尽管重定向回“HTTP Referer”是一个深思熟虑的行为

例如,以下指向您主页的链接当前302重定向回“此页面”

变通办法 您的站点似乎有两种语言,如第一个路径段所示,
/en/
/es\u es/
(默认)。如果省略,应用程序逻辑似乎无条件重定向(302)到
/es_es/
(它不是从用户的浏览器首选项推断出来的,也不是为返回的访问者记住的)

在应用程序启动之前,您可以在
.htaccess
的早期重定向到
/es\es/
。(根据相同的逻辑,请求HTTP主页也可以正常工作,因为它在
.htaccess
的早期被重定向到HTTPS)

在执行
RewriteEngine
指令后,尝试以下操作:

RewriteRule ^$ https://example.com/es_ES/ [R=302,L]
请注意,这是一个“变通方法”,它不能解决根本问题


另外

此HTTP到HTTPS重定向并非严格正确,因为它无条件地在请求前加上前缀
/es\es/
,即使可能已经存在有效的语言代码。例如,请求<代码>http://example.com/es_ES/about(HTTP),您将被重定向到
https://example.com/es_ES/es_ES/about
(404)。等等

HTTP到HTTPS重定向应该只重定向到相同的URL路径(在别处解决任何其他语言/路径问题*1)。例如,这应该写成:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com/$1 [R=301,L]
QSA
(查询字符串追加)标志不是必需的,因为默认情况下查询字符串(如果有)是通过的,除非您在替换字符串上创建一个新的查询字符串(然后需要
QSA
标志从原始请求追加查询字符串)

(*1在某种程度上,前面的“变通方法”解决了缺少的语言代码。)


严格地说,应该根据
Accept language
HTTP请求头的值有条件地默认该语言-但这最好在PHP中完成,而不是
.htaccess

Apache
.htaccess
文件中似乎没有任何东西会导致此重定向。然而,从Google SERPs导航时的重定向响应(顺便说一句,它只在导航到主页时出现,而不是子页面)似乎来自Nginx服务器(可能是前端代理),而不是Apache。@White先生,这是否意味着我自己无法解决某个问题?哇,很好的解释,非常感谢您的时间和努力,做得很好!
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com/$1 [R=301,L]