• ベストアンサー

mod_rewriteを使ってURLの書き換えがどうしてもできません。

以下のページを参考にURLの書き換えにチャレンジしました。 http://tech.bayashi.net/svr/doc/apache/mod_rewrite.html 私の場合は以下のURLを http://example/list.html?ct=category&ed=34 以下のように書き変えたいと考えています。 http://example/list/category/34 ―.htaccess RewriteEngine on RewriteRule ^/list/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ list.html?ct=$1&ed=$2 [L] このように記述したのですが、私としてはこれで問題ないと考えているのですが、なぜかできません。どこかにミスはないでしょうか……? ちなみに、.htaccessに以上のように記述して http://example/list.html/category/34 にアクセスしたところ以下のように表示されました。 Object not found! 要求された URL は本サーバでは見つかりませんでした。もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 404 ...

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

# 一例 RewriteEngine on RewriteBase / RewriteRule ^list/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ list.html?ct=$1&ed=$2 [L] ^の扱いにはお気を付けください^^

aiueo667
質問者

お礼

先ほど既に自分でまったく同じコードを書いて解決しておりました……(笑 ^の意味が良く分からないので、調べたいのですが検索の仕方がわかりません……。CSSのセレクタなどもどのように調べたらいいのか分からず莫大な時間を消費して調べています……。

その他の回答 (2)

noname#98692
noname#98692
回答No.2

list.html が正しい場所にあるかどうか確認して下さい。 http://exsample.com/list.html に直接アクセスできますか? 僕の書いた例だと /list.html ですから、ドキュメントルート直下に list.html があるはずです。

aiueo667
質問者

お礼

ドキュメントルート直下に list.html を確認できます。またブラウザからも直接アクセスすることができます。 あと最初に RewriteEngine on と書いただけでエラーが出ていたので、http.conf 内にある #LoadModule rewrite_module modules/mod_rewrite.so という行を LoadModule rewrite_module modules/mod_rewrite.so というようにして有効にしました。 その後、phpinfo() で表示されるページに mod_rewrite の記述が出てきたので有効になったのだと判断しました。(有効した後は、RewriteEngine on を書いただけでエラーになることはなくなりました。) この手順がまずかった、もしくは他に足りない作業がありますか……?

noname#98692
noname#98692
回答No.1

RewriteRule ^/list/([^/]+)/([^/]+)/?$ /list.html?ct=$1&ed=$2 [L] ではどうですか?

aiueo667
質問者

お礼

コメントありがとうございます。 RewriteRule ^/list/([^/]+)/([^/]+)/?$ /list.html?ct=$1&ed=$2 [L] と書いても結果は特に変わりませんでした。 なぜできないのかまったく分かりません。 このような場合、どこかapacheなどに根本的なミスがあるのでしょうか……?

関連するQ&A

  • mod_rewriteでURLの書き換えができない

    mod_rewriteでURLの書き換えを行おうと思っていますが なぜだか以下のような現象となりURLの書き換えが正常に行うことが できません。 【期待する動作】 (1)のようなURLでアクセスした場合、(2)のようなURLに 書き換えを行いたいが、(3)のようなURLになってしまい 正常に書き換えが行われない。 (1) http://example.com/hoge/list/01/01 (2) http://example.com/hg/list/360/01 (3) http://example.com/hg/list/.asp/360/01 ※ (1)のURLに含まれない拡張子のようなものが含まれてしまう。 【.htaccessの設定】 RewriteEngine on RewriteBase / RewriteRule ^hoge/list\/?(.*)$ /hg/list/$1 [R=301,L,QSA] 【環境】 OS:CentOs Web:Apache2.x その他:.aspという拡張子のファイルはPHPが動作するように設定してあります。 おそらくどこかの設定でこのような現象になってしまっているのだと思いますが、 どこの設定を見たら良いか検討がつきません。 どんな些細なことでも結構ですので、助言を頂けたら幸いです。

  • mod_rewriteについて

    http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 ということをしたいのですが、.htaccessにはどのように記述すればよいでしょうか? (abcの部分は、いろんな文字列の場合があります。) ちなみに以下の記述を追加していて、 http://www.example.com/abc/ の場合は、 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示するようにしています。 ---------- RewriteBase / RewriteRule ^main/.* - [L] RewriteRule ^(.*)/(.*)$ /main/$1/$2 ----------

  • mod_rewriteでの'?'表示

    http://www.example.com/search.cgi?a=mypage&b=go&c=1&d=2 を、 http://www.example.com/mypage/go/search?c=1&d=2 に変えたいですが、どのようにすればよいのでしょうか? htaccessでは・・・ Options +FollowSymlinks RewriteEngine on RewriteRule ^/([0-9A-Za-z]+)\/([0-9A-Za-z]+)\/search?c=([0-9A-Za-z]+)&d=([0-9A-Za-z]+)$ /search.cgi?a=$1&b=$2&c=$3&d=$4 [L] にしてもアクセスできません… APACHEマニュアルでは「?」は文字数指定と言う文法に なるらしく、「?」を表示させたいです。 http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule どうすればよろしいでしょうか?ご教示ください。

  • mod_rewriteによるURLの書き換え

    mod_rewriteを使ってURLの書き換えを行いたいのですが、どうしてもうまくいきません…。 http://***.main.jp/rewrite/name/index.shtml?total=num にアクセスされた場合に http://***.main.jp/rewrite/php.php?title=name?total=num に切り替えて処理させたいと思っています。 .htaccessには RewriteEngine on RewriteRule ^(.*)/index\.shtml\?total=([0-9]*)$ rewrite/php.php?title=$1&total=$2 このように記述したのですが、書き換えが行われずにindex.shtmlの内容が表示されてしまいます。 どうか、ご教授いただけませんでしょうか? サーバーはロリポップを使用しています。

  • mod_rewrite の記述について

    .htaccess に、mod_rewrite の記述を書いて、以下のようなことをしたいのですが、 1.http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示 2.http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 以前教えていただいた以下の記述でできるのですが、ディレクトリが追加されたら、.htaccess にも追加が必要になってしまいます。 どのように実現すればよいでしょうか? ------------------------------------------------------------ RewriteCond %{REQUEST_URI} ^/main/(.*)$ RewriteCond %{HTTP:My_Redirect} !yes RewriteRule ^main/(.+)$ http://example.com/$1 [QSA,R] RewriteCond %{REQUEST_URI} ^/(abc|aaa|bbb|ccc|ddd)/ RequestHeader set My_Redirect yes RewriteRule ^(.*)$ /main/$1 [QSA,L] ------------------------------------------------------------

  • mod_rewriteでURLを書き換えたい

    現在掲示板を運営していますが、Googleなど検索サイトからのクロールがうまく行われません(サイトマップなどは試しました)。 URLに“?”や“=”が含まれる動的なページはクロールされずらいことがあるとのことで、調べてみると、mod_rewriteを使うことで 静的ページのように表現できるということまでわかりました。 また、レンタルサーバに問い合わせた結果、mod_rewriteは.htaccessファイルに記述することで使用することができるとのことでした。 (例)http://www.aa.com/bb.php?cc=123 現在上記のようなURLで、最後の数字が入れ替わるようになっています。 このURLの“?”や“=”を“/”などを代用するなりして表示されないようにしたいと考えておりますが、 いろいろ調べてみましたが、私のスキルでは具体的にどのように書けばよいのかわかりませんでした。 .htaccessにいかように記述すればよいのでしょうか。 アドバイスのほどよろしくお願いいたします。

  • mod_rewriteでアドレスを書き換えたい

    mod_rewriteでアドレスを書き換えたい思っています。 xamppでテストしていますがうまくいきません。 mod_rewrite.soの#は外しています。(つまり、.htaccess以外の設定はできていると思います) 【やりたい事】 localhost/test/index.php?p=test を  ↓ localhost/test/i/test でアクセスしたいです。 【参考にした情報】 http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 というURLを静的なアドレスでアクセスできるように以下のように設定します。 RewriteEngine on RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L] を言うのを見つけました。 【試したこと】 .htaccessをつくり RewriteEngine on RewriteRule ^/test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] と記入 【結果】 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 と表示されました。 ------------------------------------------------------------------ localhost/test/i/testでアクセスするには、.htaccessをどう書けばいいのでしょうか? 疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? 疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? よろしくお願いします。

  • mod_rewrite設定について

    タイトル通りPHPではなく、mod_rewriteについての質問になります。 適切なカテゴリが見当たらなかったので、PHPカテゴリであれば適切な回答を頂けると考えてこちらに書かせていただきます。 一応、.htaccess内にmod_rewriteの記述をして動作させる事はできていますが、理解が浅く応用が効かないレベルです。 ちょっと、今回その応用が必要になって、ハマッてしまいました。 仮に現在、以下のようなユーザディレクトリ形式のレンタルサーバで動作しているサイトがあるとします。 ttp://example.com/hoge/ RewriteEngine On RewriteBase /hoge/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /hoge/blog/index.php [L] この例では、.htaccessを【ttp://example.com/hoge/】に置いて、その下の階層に置かれたblogディレクトリのindex.phpにリダイレクトさせるという事ですが。 今回該当サイトのサーバを移動する事になって、ユーザディレクトリ形式ではなく、サブドメイン式の以下のようなレンタルサーバへ移動する事になりました。 ttp://hoge.example2.com/ もちろん、.htaccessの内容も書き換えて、以下のようにちゃんと変更して動作させる事ができています。 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] .htaccessを基準として見れば、自分(.htaccess)よりも下のblogディレクトリにアクセスするのは変わりないので、相対記述さえできれば…と試してみたところ、動きませんでしたorz。 どの階層に置かれても100%動く!!.htaccessが置かれたディレクトリをリネームされても大丈夫!! という記述方法があればベストなんですが。 ※特殊な環境では無理だが、一般的環境では8割方動くだろうという事でも可 そんな記述方法がないにしても理解が浅いために、「たぶん無理だろう」という予感を持っているだけで「このような理由で技術的に無理です」と言えないところに問題が。 ※ワードプレスのような広く使われているシステムが、ディレクトリ移動の際には書き換えの必要があるため。方法があるなら、きっとその方法は既に導入されているはずという予感から。 よろしければ、ご教授ください。

    • 締切済み
    • PHP
  • htaccessでmod_rewrite

    htaccessに下記のように記述しました。 RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?p=$1 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2&y=$3 [L] RewriteRule ^sample/test/([0-9A-Za-z_]+)/$ sample/test.php?id=$1 [L] すると 「http://www.○○○.jp/index.php?p=●」 は 「http://www.○○○.jp/●/」 「http://www.○○○.jp/index.php?p=●&m=△」 は 「http://www.○○○.jp/●/△/」 「http://www.○○○.jp/index.php?p=●&m=△&y=■」 は 「http://www.○○○.jp/●/△/■」 でアクセスできました。 が、 「http://www.○○○.jp/sample/test.php?id=★」 は 「http://www.○○○.jp/sample/test/★/」 でアクセスできません。 おそらく、 「http://www.○○○.jp/sample/test/★/」を 「http://www.○○○.jp/index.php?p=sample&m=test&y=★」 として認識しているためだと思いますが、 対策がわかりません。 このような場合は、どう対処すればよいのでしょうか。

    • ベストアンサー
    • PHP
  • CentOSでhtaccessを使用してmod_rewrite

    CentOSで、htaccessを使用してmod_rewriteを利用したいのですが、いまいちどうしたらいいのかがわかりません。 動的URLを静的URLに変換したく、 htaccessに RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] と書きこみました。 すると404エラーがでます。 試しに #RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] とコメントアウトしたところ、通常に表示されました。 RewiteEngine on が何かしらの影響を与えていると思うのですが、 対策がよくわからないので質問いたしました。 ちなみにhttpd.confの設定は完了しています。 LoadModule rewrite_module modules/mod_rewrite.so と記述。

専門家に質問してみよう