• 締切済み

mod_rewriteについて

いつも参考にさせていただいております。 mod_rewrite を使って動的ページを静的ページに見せようとしています。 サイト内で検索する場合、検索条件が多数あるため どのようにしたらいいのか悩んでいます。 RewriteRule ^test_a_([0-9A-Za-z_]+) /test_a.php?%{QUERY_STRING} [L] としたとき、ページにはリンクされます。 ですが、パラメータとして扱われません。 (print_r($_GET); としても出力されません) 検索の場合、検索条件によってパラメータが変化するので RewriteRule を多々書き込まなくてはいけなくなってしまいます。 ですが、あまり書きすぎると動作がおかしくなると聞いています。 何かいい方法はありますでしょうか。 ご教授よろしくお願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

みんなの回答

  • notnot
  • ベストアンサー率47% (4847/10260)
回答No.1

具体的にどういうことをしたいか書かれて無いので、一般的なアドバイスになりますが、 正規表現をうまく使って、パターンの数を減らすといいと思います。 過去にもmod_rewriteの質問は多く出ていますので近いものを探して参考にするとよいでしょう。

wonder_dct
質問者

お礼

notnot さんご回答ありがとうございます。 正規表現を使ってパターンを減らすことにしました。 アドバイスありがとうございました。

関連するQ&A

  • mod_rewriteの正規表現

    いつもお世話になっております。 mod_rewriteを使って、動的ページを静的ページのように表示したいと 考えております。 ですが、正規表現が間違っているようで、うまくリダイレクトされません。 test.php?aid=00000001 にアクセスされた場合 test/aid/00000001 と表示したいと考えております。 下記のように(他にもいろいろ試しましたが)やったのですが・・・ RewriteRule test.php?([0-9A-Za-z]+)$=([0-9]+)$ /test/$1/$2 [L] ご教授よろしくお願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

    • ベストアンサー
    • PHP
  • mod_rewriteで

    mod_rewriteで /dir/aaa/bbb/form.html  を  /dir/form.php?id1=aaa&id2=bbb にする書き方を教えてください いまのところ RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)/form.html /dir/form.php?id1=$1&id2=$2 [L] としていますが上手く出来ていないようです

  • mod_rewriteについて

    いつもお世話になっております。 mod_rewriteを使ってURLの書き換えをしたいと思っております。 下記のようなファイルがあるとします。 http://www.domain.com/aaa/list.php http://www.domain.com/aaa/detail.php http://www.domain.com/bbb/list.php http://www.domain.com/bbb/detail.php PHPファイルはHTMLに書き換えています。 ---------------------------------------- RewriteEngine on # QUERY_STRING RewriteRule /([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ /$1/$2.php?$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.html$ /$1.php [L] ---------------------------------------- http://www.domain.com/aaa/detail/2.html http://www.domain.com/bbb/detail/2.html 上記どちらにアクセスしてもページが表示されませんと なってしまいます。 どうぞ、ご教授お願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

    • ベストアンサー
    • PHP
  • mod_rewriteを適用して

    mod_rewriteを適用したところ、リンク先HTMLがおかしくなりました。 http://xxx.jp/rewrite.php?p=1 ↓ http://xxx.jp/rewrite/1 とするようにルールを以下のように設定しました。 RewriteRule ^/rewrite/([0-9A-Za-z)]+) /rewrite.php?q=$1 すると、ドキュメントルート直下の他のファイル(hoge.php)へのリンク先HTMLが http://xxx.jp/rewrite/hoge.php となってしまいます。 なぜこうなってしまうのでしょうか?

  • 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でQUERYパラメータ数操作

    mod_rewriteで、静的化したいのですが、 QUERYパラメータ数が変化する場合には、どうすればよいでしょうか? ■現状 ▼URL /hoge.php?id=1 ▼.htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^hoge([0-9A-Za-z]+)\.html$ hoge.php?id=$1 [L] QUERYパラメータ数が一個のときは、 hoge1.htmlとなり、うまくいくのですが、 下記URLのようにQUERYパラメータがない場合があり、その場合に、エラーとなります(元のリンク自体も書き変えるので)。 /hoge.php QUERYパラメータ数が変化する(ない場合もある)時の.htaccessは、 どのように書けばよいのでしょうか? ・htaccess内で、条件分け可能なのでしょうか?

    • ベストアンサー
    • PHP
  • mod_rewriteの相対パス

    いつもお世話になっております。 mod_rewrite を使ってパスの書き換えを行いたいと思っております。 以前にも mod_rewrite について質問させていただいたのですが 違う方法で解決できました。 画像ファイル等のRewriteRule を教えていただきたく質問させていただきます。 例えば・・・ http://domain.jp/a.php?id=111 を http://domain.jp/a/id/111 に書き換えた場合、階層が深くなるため画像が表示されなくなります。 a.php の中には以下のような画像ファイルの記述があります。 <img src="./img/aaa.jpg"> <img src="./img/bbb.gif"> できれば、RewriteRule を使って画像ファイルのパスを書き換えたいと 思っております。 どのようなルールを書けばよろしいでしょうか。 それとも絶対パスじゃないと無理なのでしょうか。 ご教授お願いいたします。 よろしくお願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

  • 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が効かない!

    サーバの運用上、mod_rewriteを使う必要が出来たので設定してみたのですが効きません。 FreeBSD4.11+Apache1.3.33で httpd.confファイルに直接書き込んで試しています。 LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c のどちらも書いてあるにもかかわらず、下記のテスト設定を試してみたらローカルIPからアクセス出来てしまいます。 RewriteEngine on RewriteCond %{REMOTE_ADDR} ^192\.168\.1\. ←ローカルネットワークのアドレス RewriteRule ^.*$ - [F] どのようにしたらいいですか? アドバイスお願い致します。

  • mod_rewriteについて

    SEOに効果があるのかも賛否両論ですが.htaccessに以下のような指定で 拡張子がphpのものをhtmlに変更しました。 RewriteRule ^([A-Za-z0-9]+).html$ $1.php [L] ○○.htmlにアクセスがあれば実際には○○.phpを表示させるという ことで成功はしたのですが○○.phpにアクセスしても普通にページが 表示されてしまいます。 ロボットがきてhtmlとphpと同内容があればなにか問題があるのかと 思い(根拠がない勝手な妄想ですが)○○.phpにアクセスがあれば実際に 表示するのは○○.phpですが○○.htmlへリダイレクトさせたいと 思っているのですがどうやれば可能でしょうか? また実際にサーバーにアップしてあるファイルの拡張子はphpなので すがmod_rewriteでこのような設定をしただけでロボットにhtmlとして 認識されるのでしょうか? mod_rewriteは初めて使うもので希望の動作に必要性があるのかすら よくわからない状況なのですが詳しい方がおりましたら是非ご教授を お願い致します。