3

私は自分の環境で正常に機能するテスト環境で顧客の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。

4

1 に答える 1

1

「GET」はどこから来ますか?これは、これらのルールに影響を与える他のコードのないベアボーン ページです。

このルールのスニペットでは%1RewriteRule. これは、前の の最後の()一致を参照RewriteCondします(GET|HEAD)

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

これらの 2 つの条件を次のように切り替えます。

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

そのため、%1参照([^&]+)

于 2012-07-17T11:56:02.857 に答える