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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

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

Q&A

解決済

2回答

1243閲覧

Apache リダイレクト:直前に閲覧していたURLを書き換えてリダイレクト

AkinobuKatou

総合スコア10

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

mod_rewrite

ApacheウェブサーバーのためのURL書き換えモジュールです。主にプリティーURLに使われていますが、同様に単純置換を超えた、多様なタスクの処理能力や柔軟性があります。

Apache

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

0グッド

0クリップ

投稿2018/04/02 00:57

CentOS 7.4/Apache 2.4.6を利用しています。
直前に閲覧していたURLを書き換えてリダイレクトさせるような設定は可能でしょうか?

現在表示しているページ:
http://example.jp/aa/aa/homepage/test01.html

上記ページからこちらのページに遷移:
http://example.jp/bb.html
本ページは実態がなく、アクセスした場合は以下いずれかのページにリダイレクトさせる。

1.bb/bb/homepage/test01.html が存在する場合
以下ページにリダイレクト
http://example.jp/bb/bb/homepage/test01.html

2.存在しない場合
homepage.htmlにリダクレクト
http://example.jp/bb/bb/homepage.html

これと同じことをtest01.htmlに限らず任意のアドレスで実施させたいです。

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

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

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

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

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

deadjupiter

2018/04/02 07:16

直前のURLをどこに持たせたい? cookie? それともquery?
AkinobuKatou

2018/04/02 07:22

機能として実現可能であれば手段は問わずと考えていますが、出来れば仕組みとして複雑になりすぎないものを考えています
guest

回答2

0

ベストアンサー

%{HTTP_REFERER} を信用するのであれば、以下でどうでしょうか。

RewriteEngine On RewriteRule ^aa/aa/homepage/(.*) /bb.html [R,L] RewriteCond %{HTTP_REFERER} /aa/aa/homepage/(.*)$ RewriteCond %{DOCUMENT_ROOT}/bb/bb/homepage/%1 -f RewriteRule ^bb.html$ /bb/bb/homepage/%1 [R,L] RewriteCond %{HTTP_REFERER} /aa/aa/homepage/(.*)$ RewriteCond %{DOCUMENT_ROOT}/bb/bb/homepage/%1 !-f RewriteRule ^bb.html$ /bb/bb/homepage.html [R,L]

投稿2018/04/06 14:00

編集2018/04/06 14:51
TaichiYanagiya

総合スコア12146

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

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

AkinobuKatou

2018/04/09 23:46

ありがとうございます!不勉強で大変申し訳ありませんが、 RewriteCond %{DOCUMENT_ROOT}/bb/bb/homepage/%1 -f というのは具体的にはどういう処理を行っている部分になりますでしょうか?
AkinobuKatou

2018/04/09 23:47

あ、  %{DOCUMENT_ROOT}/bb/bb/homepage/%1 が存在すれば(存在しなければ)という条件文ですね!失礼しました!
guest

0

RewriteCondとRewriteRuleを使っていろいろ試してみたのですが、Apacheだけでは実現できないのではないかと思い当たりました。

リダイレクトの条件としては、以下のようにしてあげれば、リンク元のURLにMatchする場合だけリダイレクトさせることは可能です。

RewriteCond %{HTTP_REFERER} ^.*/aa/aa/homepage/.*$

問題は、RewriteRuleでリダイレクト先のURLを指定ところですが、%{HTTP_REFERER}からtest01.htmlだけを抽出する方法が見当たりません。
RewriteRuleでは、正規表現と環境変数が利用できるのですが、環境変数の中身を正規表現で抽出する方法がなさそうです。
実際のアクセス先は、bb.htmlであるため、%{HTTP_REFERER}以外の変数は、目的の情報を保持していないことから、Appacheだけでは実現が難しいと思われます。

bb.htmlは実体がないというのが要件ですが、もしここに何かしらのサーバサイドプログラムを置くことが許されるのであれば、実現は可能だと思います。

投稿2018/04/06 12:52

easymachine

総合スコア48

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問