gpt4 book ai didi

.htaccess - 301重定向规则在不同的托管环境中给出不同的结果

转载 作者:行者123 更新时间:2023-12-02 03:58:30 25 4
gpt4 key购买 nike

我一直在测试环境中为客户做一些URL重写,在我的环境中可以正常工作,但是当我转向他们的客户时,我得到了不同的结果,规则失败了。

我301以以下格式重定向旧版动态网址:

http://www.companyname.com/page.php?pagename=AboutCompany&lang=EN
to
http://www.companyname.com/EN/about-company/

使用下面的规则集,在我的“Heart Internet”共享主机上可以正常工作,但在其“Go Daddy”共享主机上(在下面的配置中)失败。在Go Daddy环境中,旧版URL被重定向到:
http://www.companyname.com/GET/about-company/
instead of
http://www.companyname.com/EN/about-company/

“GET”从哪里来?这是一个准系统页面,没有其他代码会影响这些规则。
RewriteCond %{QUERY_STRING} pagename=AboutCompany
RewriteCond %{QUERY_STRING} lang=([^&]+)
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php
RewriteRule ^page.php$ /%1/about-company/? [R=301,L]

RewriteRule ^([A-Za-z]+)/about-company$ page.php?pagename=AboutCompany&lang=$1 [NC,L]
RewriteRule ^([A-Za-z]+)/about-company/$ page.php?pagename=AboutCompany&lang=$1 [NC,L]

“lang”查询字符串因用户语言首选项(EN或FR或DE等)而异。

测试环境:
视窗
IIS7.5
PHP 5.3.6

客户环境:
的Linux
Apache
PHP 5.2

谢谢,M。

最佳答案

“GET”从哪里来?这是一个准系统页面,没有其他代码会影响这些规则。

在此规则片段中,您的%1中有一个反向引用 RewriteRule 。这引用了先前()中的最后RewriteCond匹配项,而恰好是(GET|HEAD):

RewriteCond %{QUERY_STRING} lang=([^&]+)
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php
RewriteRule ^page.php$ /%1/about-company/? [R=301,L]

您想切换这两个条件:
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php
RewriteCond %{QUERY_STRING} lang=([^&]+)
RewriteRule ^page.php$ /%1/about-company/? [R=301,L]

这样 %1 引用 ([^&]+)

关于.htaccess - 301重定向规则在不同的托管环境中给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11521547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com