301重定向规则在不同的托管环境中给出了不同的结果
问题描述:
我一直在测试环境中为客户做一些URL重写,在我的环境中工作正常,但是当我移动到他们的时候,我得到不同的结果并且规则失败。301重定向规则在不同的托管环境中给出了不同的结果
我在下面的格式301个重定向遗留的动态网址:
http://www.companyname.com/page.php?pagename=AboutCompany&lang=EN
to
http://www.companyname.com/EN/about-company/
使用规则集低于这个作品在我的“心互联网”共享主机正常,但无法对他们的“去爸爸”共同主办(CONFIGS下面)。在Go Daddy环境中,遗留网址被重定向到:
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]
的 '郎' 的查询字符串取决于不同的用户语言偏好(EN或FR或DE等)
测试环境:
的Windows
IIS7.5
PHP 5.3.6
客户环境:
Linux的
阿帕奇
PHP 5.2
感谢,M.
答
哪里了 'GET' 来了吗?这是一个没有其他代码影响这些规则的准系统页面。
在这个片段中你的规则,你有一个反向引用您的RewriteRule
%1
。这涉及到最后()
比赛在前面RewriteCond
,这恰好是(GET|HEAD)
:
你想围绕切换的2个条件:
RewriteCond %{THE_REQUEST} ^(GET|HEAD)\ /page.php
RewriteCond %{QUERY_STRING} lang=([^&]+)
RewriteRule ^page.php$ /%1/about-company/? [R=301,L]
从而使%1
引用([^&]+)
IIS的重写引擎是不一样的Apache的 – 2012-07-17 11:44:49
嗨乔恩,谢谢,我知道他们是不同的,因此wh我列出了环境。不过,我想知道如何在apache环境中获得相同的行为。 – MonkeeX 2012-07-17 11:52:47