.htaccess 在谷歌搜索结果中点击我的网页会将我重定向回谷歌
我在一个网站上帮助一个朋友,这个网站是使用plesk提供的在线平台创建的,当试图通过谷歌访问这个网站时,出现了一个问题 直接在浏览器中写入域很好,但通过谷歌搜索访问域时,会将用户重定向回谷歌 可能是什么问题 这是我的.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
<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]