人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

htaccessリダイレクト

お世話になっています。

RewriteEngine on
Redirect permanent http://example.com/work/ http://blog.example.com/work/

http://example.com/work/にアクセスがあった場合
http://blog.example.com/work/にリダイレクトする
ができません。

/home/?/とフルパスで指定してもできませんでした。

work/ディレクトリはないのですがリダイレクトに影響するのでしょうか?

htacessの利用はできるので、正しい書き方をご教授御願いします。


●質問者: oracle11011
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
ベストアンサー

「Redirect」ディレクティブは、mod_aliasの機能ですので、「RewriteEngine on」は必要ありません。
何かの機能を試してみて思ったように動作しなかった場合は、公式のドキュメントを確認するようにするといいです。

http://httpd.apache.org/docs/2.2/mod/mod_alias.html

Redirect ディレクティブ

説明: クライアントが違う URL を取得するように外部へのリダイレクトを 送る
構文: Redirect [status] URL-path URL
コンテキスト: サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: FileInfo
ステータス: Base
モジュール: mod_alias

Redirect ディレクティブは古い URL を新しいものへマップして、 クライアントに新しい場所を訪れるように指し示します。

古い URL-path (% が復号された) パスは、 スラッシュで始まるものです。相対パスは使用できません。 新しい URL は絶対 URL 、つまりスキームとホスト名で 始まるものであるべきですが、URL-path の、スラッシュで始まるものも 使用可能です。その場合は、現在のスキームとホスト名が追加されたことに なります。

URL-Path で始まるどんなリクエストも、ターゲットの URL へとリダイレクトが返されます。URL-Path にマッチした path 情報は、ターゲット URL の後ろに追加された 形で引き継がれます。

Redirect /service http://foo2.example.com/service

クライアントは http://example.com/service/foo.txt へのリクエストを行なうと、代わりに http://foo2.example.com/service/foo.txt をアクセスするように告げられます。 パスセグメントが完全に一致したもののみがマッチしますので、 上記の例は http://example.com/servicefoo.txt にはマッチしません。 正規表現を使ったより複雑なマッチングについては、 RedirectMatch ディレクティブをご覧ください。


「古い URL-path (% が復号された) パスは、 スラッシュで始まるものです。」とありますので、リダイレクト元はスキームとホスト名は不要です。

Redirect permanent /work http://blog.example.com/work



※他、status引数の説明については、参照URLを確認してください。


oracle11011さんのコメント
Redirect permanent /work http://blog.example.com/work このアドレスへのリクエストに対するサーバの自動転送設定がループしています。 となってしまうので引き続き募集します。 workディレクトリはないのですがそちらは大丈夫なのでしょうか?

rouge_2008さんのコメント
.htaccessは「http://example.com」に設置していますか? > workディレクトリはないのですがそちらは大丈夫なのでしょうか? 大丈夫です。問題ありません。 .htaccessの設置場所に問題がない場合は、.htaccessの他の記述あるいは何らかのアプリケーションなのでしたら、そちらの処理がループの原因となっている可能性があります。 他にはどんな記述がありますか? また、アプリケーションは使用しているとしたら、そのアプリケーションの名称は何ですか?(※CakePHPあるいはWordPressなど・・・)

oracle11011さんのコメント
コメント有難うございます。 .htaccessはhttp://example.comに配置してます。 WordPressを利用しています。 http://blog.example.com/workは WordPress側のURLでサブドメインとしてblog/直下にWordPressを配置してあります。

oracle11011さんのコメント
.htaccess RewriteEngine on # wwwをなしに統一 独自ドメイン、サブドメインに適用 RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteRule (.*) http://example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^www\.blog\.example\.com RewriteRule (.*) http://blog.example.com/$1 [R=301,L] # index.phpをなしに統一 RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://example.com/$1 [R=301,L] RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://blog.example.com/$1 [R=301,L] Redirect permanent /work http://blog.example.com/work

rouge_2008さんのコメント
「http://blog.example.com/work」がWordPressアドレスで、かつサイトアドレスなのですか? WordPressの.htaccessはどうなっているのでしょう? ※「# index.phpをなしに統一」の記述ですが、どちらも条件が「%{THE_REQUEST} ^.*/index.php」となっています。 URLに「index.php」を含む場合、どちらのURLにアクセスさせたいのでしょう? 今回追加した「Redirect」ディレクティブでは、「work」以下にアクセスがあった場合に「http://blog.example.com/work」以下にアクセスさせたいようですから、「http://example.com/」以下に「index.php」を除いたURLでアクセスさせたいのでしょうか? 先に記述してある「RewriteRule ^(.*)index.php$ http://example.com/$1 [R=301,L]」が適用されると、次の条件に適用するURLでのアクセスはないはずです。 ループの問題とは関係ありませんが、重複する条件とルールを削除した方が良さそうです。

rouge_2008さんのコメント
すみません。ちょっと見落としていました。 「サブドメインとしてblog/直下」にWordPressをインストール済みなのでしたら、「http://blog.example.com」がWordPressアドレスで、かつサイトアドレスでしょうか? 「http://blog.example.com/work」は、投稿または固定ページで存在するURLなのですね? WordPressの.htaccessはどうなっていますか?

oracle11011さんのコメント
http://blog.example.comがサブドメインのWordPressアドレスで、 http://blog.example.com/work/がWordPressの固定ページで存在します。 http://example.com/work/というアドレスは存在せず、 http://example.com/work/にアクセスがあった場合のみ http://blog.example.com/work/にリダイレクトさせたいです。 # index.phpをなしに統一については削除します。 WordPressの.htaccessは # BEGIN W3TC Browser Cache <IfModule mod_deflate.c> <IfModule mod_headers.c> Header append Vary User-Agent env=!dont-vary </IfModule> AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json <IfModule mod_mime.c> # DEFLATE by extension AddOutputFilter DEFLATE js css htm html xml </IfModule> </IfModule> # END W3TC Browser Cache # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress でデフォルトのまま変更していません。 URLの最後に/があるのですがリダイレクトに影響しますか?

rouge_2008さんのコメント
WordPressの.htaccessにループの原因となるようなルールは見当たりません。 「http://blog.example.com/work/」に直接アクセスした場合は、問題なく表示されるのでしょうか? 今回「Redirect」ディレクティブを追加した後から。「http://example.com/work」へのアクセスでループが発生しているのですよね? アドレス欄のURLはどのような表示になっていますか? > URLの最後に/があるのですがリダイレクトに影響しますか? 固定ページのURLが「http://blog.example.com/work/」で、最後にスラッシュがついている事でしょうか? 影響しないはずです。 上記回答内ドキュメントの引用(※あるいはmod_aliasのページ)を参照してください。 『URL-Path で始まるどんなリクエストも、ターゲットの URL へとリダイレクトが返されます。URL-Path にマッチした path 情報は、ターゲット URL の後ろに追加された 形で引き継がれます。』とある通りです。 「http://example.com/work」および「http://example.com/work/」へのアクセスの両方が「/work」に合致しますので、それぞれ「http://blog.example.com/work」および「http://blog.example.com/work/」にリダイレクトされます。 ※「http://example.com/work/sample」は、「http://blog.example.com/work/sample」にリダイレクトされますので、「http://example.com/work(/)」だけがリダイレクトされるようにしたい場合は、「RedirectMatch」ディレクティブを使うか、mod_rewriteを利用すると良さそうです。 「http://blog.example.com/work」へのアクセスが、「http://blog.example.com/work/」になる仕組みは、過去の質問【[http://q.hatena.ne.jp/1085148908:title=URLの最後に ’/’をつけてるのはブラウザでしょうか? http://www.example.jp/page と指定すると,http://www.example.jp/page/ となります。この最後の / をつけているのはサーバorブラウザなのか,どういう仕様・根拠(RFC番号)でつけてるのか。知りたいです。]】を参照してください。(※斜め読みしかしていませんが、まきのっぴさんとsakyoさんのコメントにある通りの動作のようです。) ※リダイレクト元、リダイレクト先ともにWordPressなど特別なアプリケーションが動作していない環境で試してみてください。(※htmlファイルやそのまま結果を出力するような簡単なphpファイルのみの環境) ※なお、こちらではリダイレクト元が通常のHTMLファイルやフォルダで構成されたサイト、リダイレクト先がWordPressで構築されたサイトという環境で問題なく動作しています。

oracle11011さんのコメント
.htaccessは Redirect permanent /work http://blog.example.com/work だけにして http://example.com/work としてアクセスすると http://blog.example.com/work//////////////////// このアドレスへのリクエストに対するサーバの自動転送設定がループしています。 となってしまいます。 http://blog.example.com/work/へは通常どうりアクセスできます。

oracle11011さんのコメント
htaccessがある状態で http://blog.example.com/work/ にアクセスすると http://blog.example.com/work//////////////////// このアドレスへのリクエストに対するサーバの自動転送設定がループしています。 となってしまいアクセスできません。 (htaccessを削除すれば通常にアクセスできる) クッキーやキャッシュを消してトライしているのですがうまくいきません。

oracle11011さんのコメント
予想なんですが htaccessの/workがリダイレクト前のURLと後のURL両方マッチしている気がするのですがどうでしょう?

rouge_2008さんのコメント
> .htaccessは > Redirect permanent /work http://blog.example.com/work > だけにして > http://example.com/work としてアクセスすると > http://blog.example.com/work//////////////////// ? > http://blog.example.com/work/へは通常どうりアクセスできます。 「http://example.com/work」でアクセスするとループが発生し、「http://blog.example.com/work/」に直接アクセスすると大丈夫なのですね? なぜか動作に一貫性がありません。 > htaccessがある状態で > http://blog.example.com/work/ > にアクセスすると > http://blog.example.com/work//////////////////// ? > (htaccessを削除すれば通常にアクセスできる) 前者の.htaccessは「Redirect permanent /work ?」の記述があるので、「http://example.com」に設置してある物ですね。 後者の.htaccessは「http://blog.example.com」に設置してある物(※WordPressの.htaccess)でしょうか? どちらの場合もループが発生するようですが、後者の状態で「http://blog.example.com/work/」にアクセスしてもループが発生するという事は「http://blog.example.com」に設置してある.htaccessに原因がありそうです。 これまでに提示している以外にも.htaccess(※双方に設置してある物)に何か記述はありませんか? ※『htaccessを削除すれば通常にアクセスできる』との事ですが、WordPressの.htaccessを削除すると「http://blog.example.com/work」ではアクセスできなくなるはずです。(※「http://blog.example.com/スラッグ」という形式でアクセスするには、.htaccessが必要です。) > htaccessの/workがリダイレクト前のURLと後のURL両方マッチしている気がするのですがどうでしょう? 「Redirect permanent /work http://blog.example.com/work」の「/work」でしょうか? リダイレクト元(古いURL-path)の「/work」は「http://example.com/work」、リダイレクト先(新しいURL)の「http://blog.example.com/work」はそのままですが、比べてみると分かると思いますがマッチしません。(リダイレクト元は、.htaccessを設置してある場所のホスト名に続いて、指定したパス「/work」が含まれていた場合にマッチします。)

oracle11011さんのコメント
説明不足ですいません。 htaccessはWordPressのほうはさわっていません。 Redirect permanent /work http://blog.example.com/work 1行だけのhtaccessをhttp://example.comに配置していて このhtaccessがあると http://blog.example.com/work http://example.com/work 両方のアクセスでループしてしまいます。 http://example.com直下のhtaccessを削除したら http://blog.example.com/workにはアクセスできます。

rouge_2008さんのコメント
「Redirect permanent /work ?」の記述のみの.htaccessの有無で、ループが発生したり・しなかったりというのは、やはり不可思議な動作です。 何個か上でコメントしましたが、リダイレクト元・リダイレクト先ともにアプリケーションを使用しない(※通常のHTML・画像・フォルダ等で構成された)サイトで、正常に動作するか確認してみましたか? この質問を見ている人はもういないと思いますので、今回の確認環境での動作状態の他に、上記通常のサイトでの動作確認結果、サーバー環境(※レンタルサーバー名およびプラン、またはローカルならWEBサーバーアプリケーション名とバージョンおよび有効にしているモジュール情報等)、サイトのディレクトリ構成(※「example.com」の形式で大丈夫なのでドメインの割り当て状況も・・・)、その他動作状況理解の助けになりそうな情報をなるべく詳細に付け加えて質問し直す方がいいように思います。

rouge_2008さんのコメント
解決済みの新しい質問【[http://q.hatena.ne.jp/1361256420:title=ロリポップでWordPressで特定のコマンドを表示させようとすると403Error]】でWAF機能が原因の問題が発生していたようですが、この質問のサイトもロリポップでしょうか? もしロリポップなのでしたら、WAF機能をオフにして動作を確認してみてください。 ※ログの確認ができるようですので、ユーザー専用ページで検知・防御ログの確認も行ってみてください。 http://lolipop.jp/waf/ >> 攻撃パターンの定義ファイルは自動でアップデートされるので、操作を行っていただかなくても、最新の攻撃パターンをブロックすることが可能です。 また、ロリポップ!ユーザー専用ページからクリックひとつで、検知・防御ログの確認ができます。 << http://lolipop.jp/support/faq/service/000679/ >> また、下記の点にご注意ください。 - Apacheのmod_rewriteを利用すると挙動が変わる可能性があります。 - CGI、PHPプログラムの動作に影響が出る可能性があります。 - 遮断した接続には403エラー(Forbidden)が表示されます。 - 遮断した接続を自動で復旧させることはできません。 - 特定のアクセスのみを遮断することはできません。 - ウイルス(Gumblar等)は検知できません。 << 「Apacheのmod_rewriteを利用すると挙動が変わる可能性があります。」とありますので、mod_aliasの「Redirect」ディレクティブのみ使用した場合でも影響があるのかもしれません。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ