PukiwikiベースのオープンソースCMS「sitedev」に関しての質問です。

URLを静的化したく、mod_rewriteの設定をしていますが上手くいきません。

現在
http://xxx.jp/index.php?pagetitle
目標
http://xxx.jp/pagetitle/index.html

そのものズバリのページを見つけたんですが、この通りやっても上手くいきません。
http://d.hatena.ne.jp/edge666/20071030/1193722986

どなたか御教示ください!

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/04/19 18:50:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:kent013 No.1

回答回数38ベストアンサー獲得回数7

ポイント60pt

もし本当にこの通りやったのであれば,

このページでは,はてな記法を失敗しているので,動きません.

>|RewriteEngine on
RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?$1

ではなく,

RewriteEngine on
RewriteRule ^([0-9A-Za-z]+)\.html$ index.php?$1 [L]

です.

そうでなければ,今の設定と,エラーメッセージを教えてください.

http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html]

id:freewriter

直して使いましたが、エラーが出ました。

コメント欄も確認し、その通りにしましたが、やはり同様です。

どんなエラーかというと、エラーメッセージはなく

同じページに何回もリダイレクトされてページが表示されないと言うものです。

あと、このページについては

http://d.hatena.ne.jp/edge666/20071030/1193722986

はてな記法以外で、下記間違いと思われる個所があります。

/sitedev.ini.php

define('PAGE_TABLE', '');

define('PAGE_TABLE', '');

上下が同じです。

これをどう直すかが分かれば解決しそうな気がします。

2008/04/12 20:51:39
  • id:kent013
    あぁすみません,書き変えたつもりで書き変えていませんでした.

    RewriteEngine on
    RewriteRule /([0-9A-Za-z]+)/index\.html$ index.php?$1

    かな.
  • id:kent013
    すみません.RewriteRuleは
    RewriteRule /([0-9A-Za-z]+?)/index\.html$ /index.php?$1
    こうです.

    ただ,今sitedev-ATのソースコードを見てみましたが,
    外部からアクセスされるときに,
    http://xxx.jp/pagetitle/index.html
    というURLが入力された場合,上記のRewriteRuleで対応できますが,ページ内に表示されるWikiLinkのURLは,PAGE_LINKが
    ''のとき,http://xxx.jp/index.php?(ページ名のURLエンコード)
    'y'のとき,http://xxx.jp/?12345
    'Y'のとき,http://xxx.jp/index.php?12345
    'm'のとき,http://xxx.jp/?12345.html
    となるようで,今回の
    http://xxx.jp/pagetitle/index.html
    という形式でページ内リンクを生成するためのオプションはないようです.
    それで問題なければ,最初のRewriteRuleを設定し,
    PAGE_LINKが''なら
    http://xxx.jp/(ページのURLエンコード)/index.html
    PAGE_LINKが'y'なら
    http://xxx.jp/ページのID/index.html
    でアクセスできると思います.
  • id:freewriter
    ありがとうございます。でも、やはり動作しませんね。
    ※http://xxx.jp/pagetitle/index.htmlといれています

    あと私が使っているのはsitedev2であって、sitedev+ATではありません。
    なので、yとかmの話はちょっと分からないです。

    define('PAGE_TABLE', '');

    define('PAGE_TABLE', '');

    回答にも書きましたが
    コレの件は如何ですか?
  • id:kent013
    いや,PAGE_TABLEの話が出ていて,sitedevをダウンロードしてソースを見てみたのですが,そのようなものはなかったので,ATのほうだと勝手に推測しました.
    PAGE_TABLEはsitedev+ATの機能で,sitedevにはないようです.
    AKKOさんという人が,独自で拡張しているようで,たぶん
    http://d.hatena.ne.jp/edge666/20071030/1193722986
    のひとはATのほうを使っているんじゃないでしょうか?

    sitedev2の場合は,PAGE_TABLEの機能はないので,その行はいりません.


    で,確認です.
    1,
    pagetitleというページがsitedev側にあって,
    http://xxx.jp/index.php?pagetitle
    でアクセスできる.

    2,
    mod_rewriteが動いている.
    RewiteEngine on
    RewriteRule /index2.html /index.php [L]
    とか,必ず存在していることが分かっているパスにrewriteをかけてみてください.

    3,
    RewriteEngine on
    RewriteRule ^/([0-9A-Za-z]+?)/index\.html$ /index.php?$1 [L]
    と書いていて
    http://xxx.jp/pagetitle/index.html
    とアクセスして動かないのであれば,サーバーのログを確認してください.
    上記URLにアクセスしたときのHTTPコード(404とか503とか500とか)が重要です.
    404ならrewriteルールがおかしいです.

    RewriteEngine on
    RewriteLog path/to/rewrite.log
    RewriteRule ^/([0-9A-Za-z]+?)/index\.html$ /index.php?$1 [L]
    (path/toは適当な場所で)と,htaccessに書くとrewriteのログが出力されると思いますが,それも確認してください.
  • id:freewriter
    2で動かないですね。。
    でもRewriteRuleを変えて既出のエラー(何回もリダイレクト)が出たわけですから、動かないということも無いと思うのですが。

    レンタルサーバはWebarena suiteXです。
    mod_rewriteが使えるか確認中です。

    再三ありがとうございます。
    大変感謝しております。
  • id:kent013
    http://web.arena.ne.jp/suitex/support/manual/hp/spec.html#htaccess
    を見る限り,mod_rewriteは組み込まれているようですね…

    rewriteのログを取れるように設定してみてください.

    http://wiki.bit-hive.com/tomizoo/pg/mod_rewrite%A4%CE%BB%C8%A4%A4%CA%FD より引用
    ログの採取
    変換動作の確認やデバッグを行なうにはログを採取するとよい。ログに変換の過程が出力される。ログを採取するにはRewriteLogでログファイルを指定し、RewriteLogLevelでログの採取レベルを指定する。9が最も詳細なログを取り、0はログを採取しない。

    RewriteLog /tmp/rewrite.log
    RewriteLogLevel 9

    とりあえず,ログを見れば何か分かるかも.

    こちらの環境でApache2.2を使って
    <VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "C:/cygwin/home/kent/www/"
    ServerName localhost
    RewriteEngine on
    RewriteRule ^/([0-9A-Za-z]+?)/index\.html$ /index.php?$1
    RewriteLog "C:/cygwin/home/kent/www/rewrite.log"
    RewriteLogLevel 9
    </VirtualHost>
    とかして,http://localhost/hoge/index.htmlにアクセスすると,http://localhost/index.php?hogeにリライトされましたから,RewriteRuleの問題じゃない気がします.
    ほかにRuleは設定されていないんですよね?
  • id:kent013
    あ,あと,
    RewriteRule ^/([0-9A-Za-z]+?)/index\.html$ /index.php?$1
    このルールだと「pagetitle」には,英数字しか使えないですが,それは大丈夫でしょうか?
  • id:freewriter
    .htaccessに、ログ取得のコマンドを追加するとインターナルサーバーエラーが出ますね。
    うーん。。

    >英数字しか使えないですが,それは大丈夫でしょうか?

    問題ありません。テストもそのように行っています。
  • id:kent013
    こんにちは.
    rewrite.logに書き込み権限はありますか?
    apacheが書き込む権限がないと500になります.777にしてみれば500はなくなる気がします.
  • id:freewriter
    再三ありがとうございます。
    777にしてみましたが、やっぱりダメですねー。。
  • id:kent013
    ううーん.
    もし差し支えなければ,.htaccessの内容を私宛に送っていただけますか?
    kent(at)guarana.cc

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません