このスレッドは未解決です(解決したらこちらで解決済にしてください)
<<戻る

mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/09(Mon) 21:12
名前: サン
URL:

こんにちは。初心者です。
初めて書き込みさせていただいています。
よろしくお願いします。

mod_Rewriteに関する質問です。

現在centos6.7server内部からhttpd.confを編集し
apacheを再起動させてRewriteの反映をFirefoxブラウザで確認しています。

いろいろやってうまくいかなかったのでyahooに飛ばしてみまました。

( http://domain/test.html )

RewriteEngine on
RewriteRule ^(.*) http://yahoo.co.jp [R=302,L]

これでyahooに飛びました。

しかし肝心のtest.html にはアクセスできませんでした。
test.html 内部にある外部リンク(複数)http://abc/* を http//xyz/* に
リダイレクトさせるにはどうすればよいでしょうか?

  test.html (この時点でyahooに飛んでいます。)
    |
    | (こうしたいです↓)
    |
|<html>
    |
|      ( old_url ) ( new _url )
    |
|----------- /abc/123 --------> /xyz/123
    |----------- /abc/456 --------> /xyz/456
    |----------- /abc/789 --------> /xyz/789

    ・
    ・
    ・

お手数おかけしますが
ご教授よろしくお願い致します。
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/09(Mon) 21:26
名前: サン
URL:
サンです、すみません、パスワードを設定し忘れてなお間違えたので再度ここに書き直します。

こんにちは。初心者です。
初めて書き込みさせていただいています。
よろしくお願いします。

mod_Rewriteに関する質問です。

現在centos6.7server内部からhttpd.confを編集し
apacheを再起動させてRewriteの反映をFirefoxブラウザで確認しています。

いろいろやってうまくいかなかったのでyahooに飛ばしてみまました。

( http://domain/test.html )

RewriteEngine on
RewriteRule ^(.*) http://yahoo.co.jp [R=302,L]

これでyahooに飛びました。

しかし肝心のtest.html にはアクセスできませんでした。
test.html 内部にある外部リンク(複数)http://abc/* を http://xyz/* に
リダイレクトさせるにはどうすればよいでしょうか?

test.html (ファイルは複数あります。)
|
|ほんとうはこうしたいです↓
|
|<html>
|
|-----------( old_url )-------( new _url )
|
|----------- /abc/123 --------> /xyz/123
|----------- /abc/456 --------> /xyz/456
|----------- /abc/789 --------> /xyz/789




よろしくご教授お願いします。
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/09(Mon) 21:58
名前: aadd
URL:
リライトではなくリダイレクト使うほうがいい。

http://so-zou.jp/web-app/tech/server/apache/settings/redirect.htm
参考に試してみてください。

リダイレクトチェックするサイト
http://ohotuku.jp/redirect_checker/
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/09(Mon) 22:39
名前: サン
URL:
>リライトではなくリダイレクト使うほうがいい。
>
>http://so-zou.jp/web-app/tech/server/apache/settings/redirect.htm
>参考に試してみてください。
>
>リダイレクトチェックするサイト
>http://ohotuku.jp/redirect_checker/

返信ありがとうございます。

実はmod_Rewriteで書き換え前のURL表示のままで
書き換え後のURLに転送したいと思っています。

ちょっとわからないながらいろいろやってみたのですが
僕のやった方法ではtest.htmlそのもののURLが変わってしまいました。

mod_Rewriteでtest.html内の外部リンク先をリライトすることは
できると思っていてぜひそうしたいです。

たぶんリダイレクトではURLが変更後の表示になるのかと
思いますがオプションで変更前の表示で転送できるのでしょうか?
質問ばかりですみません。ちょっとまたいろいろと調べてみようと思います。
ありがとうございます。
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/09(Mon) 23:30
名前: サン
URL:
 
しつこくてすみません、補足です。

どうも僕の調べてやっていたmod_rewriteでは
test.html内部にある外部リンクに対してではなく
test.htmlそのものをリライトしているようです。

RewriteEngine on
RewriteRule ^(.*) http://yahoo.co.jp [R=302,L]

これでtest.htmlがyahooに飛びますが

------------------------------------------------
http://deaimobi.com/mbnk-305/ 

正規表現でRewriteRule
正規表現の括弧でグルーピングをして$1で後方参照してみましょう。

RewriteEngine on
RewriteRule ^/access/(.*)$ /rewrite/$1


さて、こうするとどうなるでしょう。
「/access/」以下へのアクセスは「/rewrite/」の中身が表示されます。外部的なURLを統一できたりと使い道も広いですね。

------------------------------------------------------------------------------------------

上記を参考に

スラッシュあり

RewriteEngine on
RewriteRule ^/abc/(.*)$ /xyz/$1

スラッシュなし

RewriteEngine on
RewriteRule ^abc(.*)$ xyz$1

とやってみたのですがこれも動いてくれません。
環境にもよるのでしょうか。

他にもいろいろなサンプルを試してみたのですが
総倒れしています...;。
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 06:58
名前: stranger
URL: http://ja.528p.com/
RewriteEngine on
RewriteRule ^/abc/$ /xyz/
ではどうですか?
[R=301]や[R=302]をつけるとURLが書き換わる
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 07:08
名前: stranger
URL: http://ja.528p.com/
RewriteEngine on
RewriteRule ^/abc/$ /xyz/
ではどうですか?
[R=301]や[R=302]をつけるとURLが書き換わる

apache2.2なら
RewriteLog "/var/log/httpd/rewrite_log"
RewriteLogLevel 5

ログをとって確認しましょう

マニュアルを参考に
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
apache2.4のログ設定は2.2と異なるので
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

上手く行ったらマシンに負荷がかかるのでrewiteのログ設定は無効にする
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 11:17
名前: サン
URL:
>RewriteEngine on
>RewriteRule ^/abc/$ /xyz/
>ではどうですか?
>[R=301]や[R=302]をつけるとURLが書き換わる
>
>apache2.2なら
>RewriteLog "/var/log/httpd/rewrite_log"
>RewriteLogLevel 5
>
>ログをとって確認しましょう
>
>マニュアルを参考に
>http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
>apache2.4のログ設定は2.2と異なるので
>http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html
>
>上手く行ったらマシンに負荷がかかるのでrewiteのログ設定は無効にする

返信ありがとうございます。

>RewriteEngine on
>RewriteRule ^/abc/$ /xyz/
できませんでした。

-----------------------------------------------------------------------------------------
"/var/log/httpd/rewrite_log"

192.168.11.2 - - [10/May/2016:10:36:24 +0900] [domain.com/sid#7fb6g5c3p6512850][rid#7fb615c487b78/initial] (3) applying pattern '^/abc/$' to uri '/test.html'
192.168.11.2 - - [10/May/2016:10:36:24 +0900] [domain.com/sid#7fb6g5c3p6512850][rid#7fb615c487b78/initial] (1) pass through /test.html

--------------------------------------------------------------------------------------------

やはりtest.htmlそのもの(ファイル名)を対象にしているみたいです。

これがhtmlファイル群の(ファイル名(url))に対してであれば
そのまま有効なのだと思いました。
記述のしかたによるのかと予想しています。

動きとして、たとえですがsedのディレクトリ以下すべて再帰的置換の
find ./ -type f | xargs sed -i 's/abc/xyz!/g' (再帰的でファイル内容含むすべて)
こういう動きが目的に近いのですが

いまログをみると rename abc test.html (test.htmlファイル名だけに対して)
こういう感じの動きになっているのかと思います。
いったいこの動きは・・・。

本来は たとえで rename abc test.html の再帰的処理
つまり(ファイル名群に対して)の挙動なのでしょうか・・・。
しかしmod_Rewriteって難しいですね。

sedで例えるなら find ./ -type f | xargs sed -i 's/abc/xyz!/g'
これだけであって。

ここまで書いて気がついたのですが
RewriteRule ^/abc/$ /xyz/ これってもともと再帰的処理ではないのか
それとも書き方が悪いだけなのか ・・・
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 11:33
名前: サン
URL:

他で調べたらリライトはファイル名に対しての処理だったようです。
(どうりでいままで空回りが)

リライトで再帰的に動くよう記述できれば
ファイル群に対して有効になりますが

それでもファイル内容には反映されない感じがします。
この機能、とても複雑ですね・・。
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 20:24
名前: stranger
URL: http://ja.528p.com/
htmlファイルにに記述してあるURLならエディタで開いて
検索して一括変換すれば良いのでは?
それでは問題になることがあるわけですか
記事編集 編集
Re: mod_rewriteの方法 このメッセージに返信する
日時: 2016/05/10(Tue) 22:19
名前: サン
URL:
>htmlファイルにに記述してあるURLならエディタで開いて
>検索して一括変換すれば良いのでは?
>それでは問題になることがあるわけですか

ちょっとむずかしいようなのでリダイレクトも試してみようと思います。
一括置換でokならsedでやってしまいますが
旧URLのまま新urlに飛ばしたかったので。
問題ではないのですがだいたいニュアンスはわかるような気がします。
大変勉強になりました。
しつこくもたくさん相談させていただきました。
そしてご解答いただきありがとうございました。
記事編集 編集
件名※必須
名前※必須
URL
任意のパスワード (投稿後のコメント修正・削除時に使用)
画像認証※必須 投稿キー(画像で表示されている数字を入力)
コメント※必須

※質問を投稿後に自己解決された場合は、原因と行った対処を具体的に書き込み下さるよう、よろしくお願いします。

- WEB PATIO -