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

mod_rewriteについてお聞きします。
下記のような静的ページが複数あります。(○○○.htmlは複数ページ)
hogehoge.jp/abc/○○○.html
hogehoge.jp/abc/def/○○○.html
下記のような動的ページが複数あります(PATH_INFOを使用して、静的ページに見せています)
hogehoge.jp/abc/xyz/○○○.html
この動的ページをhogehoge.jp/abc/○○○.htmlと見せることはできないでしょうか、
勿論静的ページと動的ページのファイルネームは違う名前になっています。

●質問者: nijinohasi
●カテゴリ:インターネット ウェブ制作
✍キーワード:.jp ABC def HTML mod_rewrite
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● rouge_2008
●100ポイント

可能です。

「hogehoge.jp」のルートに「.htaccess」を置いた場合、以下のような記述になります。

RewriteEngine on

RewriteRule ^abc/○○○.html /abc/hogehoge.cgi [L]


※「/abc/hogehoge.cgi」の部分は、「hogehoge.jp/abc/xyz/○○○.html」を生成するアドレスにします。

上記の記述で、「hogehoge.jp/abc/○○○.html」にアクセスした場合に、「hogehoge.jp/abc/hogehoge.cgi」を実行して表示します。(※アドレスは変わりません。)

http://www.nishishi.com/blog/2006/01/dynamic_to_stat.html

http://q.hatena.ne.jp/1155728241

◎質問者からの返答

すいません、ありがとうございます。

○○○.html は複数あるために、どうしてよいのか分かりません。

ちなみに.htaccessは使用せず、httpd.confに直接書き込んでいます


2 ● makoohira
●20ポイント

テストしていませんが、

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([A-Za-z0-9_]+)/(.*) $1/xyz/$2

これでたぶん行けると思います。

3,4行目で、そのファイル名が実在しているか確認して、なかった場合のみ、

リクエストを書き換えていますので、混雑することはないと思います。

◎質問者からの返答

ありがとうございます。

これの必要な部分を編集しhttpd.confに書き込んでApacheの

再起動をすると、起動できなくなります。

どこか、間違っている部分は無いでしょうか。


3 ● rouge_2008
●200ポイント ベストアンサー

Apacheが起動できなくなるのは、おそらくRewriteBaseが原因ではないかと思います。

RewriteBaseをどこに書いているでしょうか?

「directory」ディレクティブと「.htaccess」でのみ使用できます。

http://httpd.apache.org/docs/2.2/ja/mod/mod_rewrite.html#rewrite...

http://httpd.apache.org/docs/2.2/ja/mod/directive-dict.html#Cont...


>○○○.html は複数あるために、どうしてよいのか分かりません。

実行するCGI(PHP?)のアドレスと見せかけたい静的ファイルのアドレスには、何か規則性はあるのでしょうか?

規則がない場合は、面倒でも各ファイル用にRewriteRuleを記述するしかないと思います。

例えば、

「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○○○.html」に見せかけたい

「hogehoge.jp/abc/hogehoge.cgi?dir=uvw&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/uvw/◎_●.html」を「hogehoge.jp/abc/def/○○○.html」に見せかけたい

「hogehoge.jp/abc/hogehoge.cgi?dir=rst&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/rst/□_×.html」を「hogehoge.jp/abc/ghi/○○○.html」に見せかけたい

・・・という場合には規則性がないので、それぞれのRewriteRuleを記述する必要があります。

RewriteEngine On

RewriteBase /

RewriteRule ^abc/○○○.html$ /abc/hogehoge.cgi?dir=xyz&mode=○&page=△ [L]

RewriteRule ^abc/def/○○○.html$ /abc/hogehoge.cgi?dir=uvw&mode=◎&page=● [L]

RewriteRule ^abc/ghi/○○○.html$ /abc/hogehoge.cgi?dir=rst&mode=□&page=× [L]

※「httpd.conf」の「directory」ディレクティブ内に記述します。


例えば、

「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=○&page=△」を実行すると生成される「hogehoge.jp/abc/xyz/○_△.html」を「hogehoge.jp/abc/○_△.html」に見せかけたい

「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=◎&page=●」を実行すると生成される「hogehoge.jp/abc/xyz/◎_●.html」を「hogehoge.jp/def/◎_●.html」に見せかけたい

「hogehoge.jp/abc/hogehoge.cgi?dir=xyz&mode=□&page=×」を実行すると生成される「hogehoge.jp/abc/xyz/□_×.html」を「hogehoge.jp/ghi/□_×.html」に見せかけたい

・・・と言う場合には、次のように1つにまとめる事が出来ます。

RewriteEngine On

RewriteBase /

RewriteRule ^[a-z]{3}/(.*)_(.*)\.html$ /abc/hogehoge.cgi?dir=xyz&mode=$1&page=$2 [L]



※細かいやり取りが必要になりそうですので、コメント欄を開けてくださると助かります。

◎質問者からの返答

【1】Directoryの中に書いたら、再起動できましたが、URLの書き換えはできませんでした。

<Directory /home/homepage/public_html>

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([A-Za-z0-9_]+)/(.*) $1/xyz/$2

</Directory>

【2】○○○.htmlは数千ページあり、○○○の部分は名詞なので、

1つずつ記述するのは困難です。

関連質問


●質問をもっと探す●



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