私は自分の環境で正常に機能するテスト環境で顧客のURL書き換えを行ってきましたが、顧客に移動すると異なる結果が得られ、ルールが失敗します。
私は次の形式でレガシー動的URLを301リダイレクトしています:
http://www.companyname.com/page.php?pagename=AboutCompany&lang=EN
to
http://www.companyname.com/EN/about-company/
以下のルールセットを使用すると、これは私の「ハートインターネット」共有ホスティングでは正常に機能しますが、「GoDaddy」共有ホスティングでは失敗します(以下の構成)。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など)によって異なります。
テスト環境:
Windows
IIS7.5
PHP 5.3.6
お客様の環境:
Linux
Apache
PHP 5.2
ありがとう、M。