2

重複の可能性:
ルートURLをサブディレクトリにリダイレクトするための.htaccess書き換え

私のサイトのすべてのリンク(2455)を変更する必要があります。

ページが次のようになるので、訪問者が(古いリンクを使用して)Googleから来ると問題が発生します404 page not found

古いリンクを新しいバージョンのページにリダイレクトしたい。例えば:

古いリンク:

http://example.com/hotel/13234
http://example.com/hotel/132
http://example.com/hotel/323
http://example.com/page/about_us
http://example.com/page/contact

新しいリンク:(「ブログ」を追加)ドメインの後に

http://example.com/blog/hotel/13234
http://example.com/blog/hotel/132
http://example.com/blog/page/about_us
http://example.com/blog/hotel/323

...
...
...

これを行うための最良の方法は何ですか?

4

2 に答える 2

5

使用mod_rewrite

RewriteEngine On
RewriteRule $ /blog [L,R=301]

これにより、すべてのリンクにプレフィックスが付けられblog、永続的にリダイレクトされます。

于 2012-12-28T18:24:52.750 に答える
2

Locationあなたはそれらを新しいものにリダイレクトすることができます

header('Location: /blog' . $_SERVER['PHP_SELF']);

PHPバージョン>=5.4.0を使用している場合は、適切なHTTPステータスコード301(永続的に移動)を送信することもできます。

http_response_code(301);

使用したい場合は、とで.htaccessリダイレクトできます。RewriteCondRewriteRule

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule .* /blog$0 [L,R=301]

このRewriteCondディレクティブは、すでに。で始まるURLの書き換えを防ぎます/blog。そうしないと、無限の再帰が発生します。RewriteRuleディレクティブはすべてのURLの前に。を付け、/blogそれ以上のルールを適用せず、LHTTPステータスコード301を送信しますR=301

これが機能するには、これらのディレクティブがで許可されている必要があります.htaccess。メインのconfファイルまたは仮想ホストコンテキストで同じディレクティブを使用できます。

于 2012-12-28T18:16:24.360 に答える