質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

3回答

4466閲覧

【リダイレクト】mod_rewriteを用いた301リダイレクトの方法

associate

総合スコア8

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

0クリップ

投稿2017/08/09 04:20

編集2017/08/09 07:22

サイトのドメインを変更と同時に、ページの階層も見直したため、ページを全て一つ一つリダイレクトの設定をしようとしています。

【旧RUL】http://old_domain/index.php?old
【新URL】https://new_domain/new/domain

のような構成になっています。

当初は「Redirect 301 /index.php?old https://new_domain/new/domain」のような記述をルートドメイン直下に配置した.htaccessにしていたのですが、旧URLにはクエリ?(URL末尾の「?old」)の所為で上手くリダイレクトが出来ないことがわかったので、mod_rewriteを利用した記述でリダイレクトをしようとしています。
(旧サイトはOHM haik、新サイトはWordPressで制作しています。)

全体的にページの階層構成が変わっているので、正規表現等でまとめてではなく、一つ一つのURLを設定して、
このURLにアクセスしたら新サイトのこのURLにリダイレクトする…といった設定をしたいです。

今は下記のような記述をしていますが、リダイレクトできていません。

RewriteEngine on RewriteBase /home/users/1/old_domain/web RewriteRule ^/index.php?old\ https://new_domain/new/domain/ [R=301,L]

サーバーはロリポップ!サーバーを利用しているので、mod_rewriteが利用できないということは無いと思います。
何卒、よろしくお願い致します。

【2017/08/09 追記】

<IfModule mod_rewrite.c> ErrorDocument 404 http://www.google.co.jp/ </IfModule>

と記入した.htaccessを設置してみたところ、存在しないページにアクセスするとGoogleに移動したので、
mod_rewrite自体は動作していることがわかりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Chrome で 301 リダイレクトが解除できないときの対処方法
https://gotohayato.com/content/100

本題と直接関係があるかどうかわかりませんが、いったん301リダイレクトをしてしまうと、chromeではその設定がキャッシュされ、解除または別の移動先に設定するのに苦労するという話です。
上手くいかない・上手く行ったという部分も、キャッシュのせいで正常に検証できていない可能性があるかと思いますので、ご注意下さい。
テスト段階では302リダイレクトにしておいて、動作検証が終わってから301にするのをおすすめします。

投稿2017/08/09 05:07

zohnam

総合スコア1441

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

associate

2017/08/09 05:54

ご回答ありがとうございます。 実際のテストは302リダイレクトで試していますが、キャッシュがリダイレクトにおいても悪さをすることは知らなかったので参考にさせて頂きます。
guest

0

http://old_domain/index.php?old

の場合、クエリ文字列は、%{QUERY_STRING} に入りますので、

RewriteEngine on RewriteCond %{QUERY_STRING} old RewriteRule ^/index.php https://new_domain/new/domain/ [R=301,L]

のような感じになります。

投稿2017/08/09 04:31

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

associate

2017/08/09 05:53

ご回答ありがとうございます。 その通りに進めてみたのですが、思うようにリダイレクトが動作しません。 (そもそもリダイレクト自体がされません) 何か他に考えられる要因などは御座いませんでしょうか…?
TaichiYanagiya

2017/08/09 16:02

.htaccess の場合、パスの先頭の「/」を省いて RewriteRule に設定するのではないでしょうか。 「RewriteRule ^index.php (略)」
guest

0

自己解決

どうやら旧サイトで利用していたCMSツール「QHM haik」では全てのページで一度index.phpを噛ませている(?)ようなので、index.phpにPHPで、IF文でuriを判断しheader("Location: "......)の記述でリダイレクトすることで解決しました。

PHP

1<?php 2$uri = $_SERVER['REQUEST_URI']; 3$to = ""; 4 5if($uri == "index.php?old") 6{ 7$to = "https://new_domain/new/domain" 8} 9else 10{ 11$to = "https://new_domain/" 12} 13 14header("HTTP/1.1 301 Moved Permanently"); 15header("Location: ".$to, true, 301); 16exit; 17?>

投稿2017/08/22 02:11

associate

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問