0

たとえば、hxxp://domain.com/store/ にオンライン ストアがあります。

ストア ディレクトリの .htaccess ファイル内には、次のものがあります。

Options +FollowSymlinks
RewriteEngine on
RewriteBase /store/
RewriteCond %{HTTP_HOST} !^www.domain.com$
RewriteRule ^(.*)$ http://www.domain.com/store/$1 [R=301]
RewriteRule ^/?$ directory.php
RewriteRule ^search/?$ search.php
RewriteRule ^category/([a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\?\_\-\ ]+)/?$ product.php?CategoryID=$1 [QSA]
RewriteRule ^([a-zA-Z0-9\!\@\#\$\%\^\&\*\(\)\?\_\-\ ]+)/?$ product/detail.php?ProductID=$1 [QSA]

それはうまくいきます!

私の問題 (問題) は、/store/ ディレクトリを /shop/ に変更する必要があることです。ただし、適切な 301 リダイレクトを設定して、SE ランキングを失わないようにする必要があります。

この状況で 301 リダイレクトをセットアップする最善の方法は何ですか?

私が見つけた唯一の解決策は、ストア内の各カテゴリ、製品などにリダイレクト 301 をセットアップすることです。たとえば、そのように。

Redirect 301 /store/category/sample-widgets/ hxxp://www.domain.com/shop/category/sample-widgets/

これは機能し、必要なことを行いますが... アドレスバーの URL は次のように表示されます: hxxp://www.domain.com/shop/category/sample-widgets/?CategoryID=sample-widgets

クエリ文字列を削除する理由または方法がわかりません。

助けてください。ありがとう。

4

2 に答える 2

0

次のような単純なRedirectディレクティブを使用できます。

Redirect 301 /store/ /shop/

または、mod_rewrite も使用する場合は、ベース URL を使用できなくなるため、現在のルールを変更する必要があります/store/

RewriteEngine on
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
RewriteRule ^store/?([^/].*)?$ /shop/$1 [L,R=301]
RewriteRule ^shop/?$ directory.php
RewriteRule ^shop/search/?$ shop/search.php
RewriteRule ^shop/category/([a-zA-Z0-9!@#$%^&*()?_\-\ ]+)/?$ product.php?CategoryID=$1 [QSA]
RewriteRule ^shop/([a-zA-Z0-9!@#$%^&*()?_\-\ ]+)/?$ product/detail.php?ProductID=$1 [QSA]
于 2009-12-30T18:22:04.287 に答える
0

PHP スクリプトを使用してリダイレクトを処理することにより、301 エラーを処理できます。

.htaccess ファイルに次のルールを追加します。

Redirect 301 /error301.php

ファイル error301.php を作成します。

<?php

$redirects = array('/path/to/old/page/' => '/path/to/new/page/',
                   '/store/category/sample-widgets/' => '/shop/category/sample-widgets/');

if (array_key_exists($_SERVER['REQUEST_URI'], $redirects))
{
    $dest = 'http://'.$_SERVER['HTTP_HOST'].$redirects[$_SERVER['REQUEST_URI']];
    header("Location: {$dest}", TRUE, 301); // 301 Moved Permanently
}
于 2009-12-30T16:49:35.177 に答える