動的ページを静的に見せる方法と空欄時のエラー対策

このQ&Aのポイント
  • 動的なページを静的に見せるための方法として、.httaccessファイルを使用してRewriteを設定することがあります。
  • RewriteRuleを使用して、URLパラメータを渡す際に、空欄の場合にエラーが発生する問題があります。
  • エラーを回避するためには、条件付きのRewriteRuleを使用することで対応できます。具体的な方法については、以下のようなコードを.httaccessファイルに追加することで実現できます。
回答を見る
  • ベストアンサー

動的なページを静的に見せるとき値が空欄のとき

.httaccessで動的なサイトを静的に見せるためRewiteをしています。 RewriteRule ^([-0-9A-Za-z]+)/([-0-9A-Za-z)]+)$ index.php?a=$1&b=$2 [L] これで 「www.hoge.com/?a=$1&b=$2」 は 「www.hoge.com/a/b」 といった形でパラメータを渡せているのですが、bの値が毎回必要ではなく、しかし空欄(www.hoge.com/a/)にしてしまうと、「The requested URL /a/ was not found on this server.」でエラーとなってしまいます。 空欄でもエラーにさせない方法はありますでしょうか? よろしくお願い致します。

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

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

  • ベストアンサー
noname#244856
noname#244856
回答No.1

+ を * にすれば 「0文字以上の繰り返し」 になりますよ。 RewriteRule ^([-0-9A-Za-z]+)/?([-0-9A-Za-z])*$ index.php?a=$1&b=$2 [L]

news_0203
質問者

お礼

ななななんと! そうだったのですね…。こんなに簡単に実現してしまうとは。。 質問して良かったです(;_;) ありがとうございました!

関連するQ&A

  • RewriteRuleの書き方

    http://hoge.com?ab=111&cd=222 でアクセスした場合、 http://hoge.com/111/cd/222 にリダイレクトさせたいと考えております。 RewriteCond %{QUERY_STRING} ab= [NC] RewriteRule ^/?ab=([0-9a-zA-Z]+)&([0-9a-zA-Z]+)=([0-9a-zA-Z]+)$ /$1/$2/$3 [R] RewriteCond で、QUERY_STRING に ab= が含まれているとき、 RewriteRule を適用する のように書いても上手くいきませんでした。 お手数ですが、どなたかご教示いただければ幸いです。 よろしくお願いいたします。

  • 動的ページを静的ページの変換

    動的ページを静的ページの変換で http://www.yyyyy.com/aaa/bbb/xxx.php?word=xxx&ger=1234&sort=xxxx を http://www.yyyyy.com/aaa/bbb/xxx.php/xxx/1234/xxxx.html としたいのですが、、うまくいきません。 DirectoryIndex xxx.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/([0-9]+)/([0-9A-Za-z]+)\.html$ xxx.php?word=$1&ger=$2&sot=$3 [L] と RewriteEngine on RewriteRule ^([0-9A-Za-z]+)/([0-9]+)/([0-9A-Za-z]+)\.html$ xxx.php?word=$1&ger=$2&sot=$3 [L] で試しました。 サーバーはxreaです。 よろしくおねがいいたします。

    • 締切済み
    • PHP
  • httpd.confのmod_rewite設定

    下記のようにMAMPのhttpd.confの一番下にmod_rewite設定のため行を追加したのですが 動作しません。 ※ちなみにURLをmod_rewite設定で http://localhost/○○○/index.php?category=△△△△△ を http://localhost/○○○/△△△△△ にする予定です。 よろしくお願いいたします。 RewriteEngine On RewriteCond %{REQUEST_URI} ^/○○○○/?(.*)$ RewriteCond %{QUERY_STRING} (^|&)category=([^&]+)($|&) RewriteRule ^([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)$ index.php?category=$1 [QSA,PT] RewriteLog tmp/rewrite.log RewriteLogLevel 3

    • 締切済み
    • PHP
  • .htaccessで動的URLを静的化

    動的URLを静的化したいと考えています。 ネットで調べるとよくあるサンプルは RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /dir/index.php?a=$1&b=$2 という風に「静的なURLにアクセスして、内部ではパラメータ付きのURLでの処理をさせる」 というパターンが多いのですが、私がやりたいのは逆で「動的URLにアクセスがあれば静的URLにリダイレクトをさせる」というものです。 理由は、 ・すでにサイトがある程度できあがっていて、既存のURLもある程度Googleにインデックスされている ・パラメータの組み合わせパターンが色々あるため上記のようなルールで対応できない などです。 そこで http://xxx.com/dir/index.php?a=01&b=02 や http://xxx.com/dir/index.php?b=02&c=03&x=999 といった動的URLを http://xxx.com/dir/a-01/b-02/ http://xxx.com/dir/b-02/c-03/x-999/ RewriteRuleを使ってこのような形で一旦301リダイレクトさせ、これをPHPの内部処理でパラメータ付きURLに戻すことによって既存のロジックを生かしたままURLを静的化できないかと考えています。 RewriteRuleの記述を色々書き換えて試してみたのですが、どうしてもやりたいようなURLの変換ができません。 どのように記述すればよいか、ご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 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 動的ページを静的ページへ

    SEO対策として、動的ページを静的ページへリダイレクトさせたいと考えています。 レンタルサーバーのため、.htaccessへ記入するしか方法はないと思っているのですが、 そもそも「静的化するってこと自体」がよく分かってないので、教えてください。 <現状> ▼URL /hoge/index.php?id=1 ▼.htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)\.html$ details.php?id=$1 [L] <結果> 実行すると、/hoge/1.htmlとなり、望む結果を得られるのですが、 念のためディレクトリを指定しておきたいと思い、 RewriteRule ^/hoge/([0-9A-Za-z]+)\.html$ /hoge/details.php?id=$1 [L] としたところ、全く静的表示されなくなりました。 ■質問1 なぜ、ディレクトリを指定すると静的化できないのでしょうか? ■質問2 ネットでmod_rewriteの解説ページを検索してみると、静的化の例として、 「hoge/1.html へアクセスがあった際に、index.php?id=1の結果を返す」、 と記載されてます。 「index.php?id=1へアクセスした際に、hoge/1.html の結果を返す」 ようにした方がいいと思うのですが、 これって結果的には同じことをしている、と考えてよいのでしょうか? ■質問3 例えば、「/hoge/index.php?id=1」に対して、 「index.php?id=1へアクセスした際に、hoge/1.html の結果を返す」 ようにするには、どう書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • 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 どうすればよろしいでしょうか?ご教示ください。

  • Netscape 7.1 で見られないページ

    ネットスケープ7.1を使っています。 特定のページを開こうとすると、 Not Found The requested URL ・・・・・ was not found on this server. とエラーになってしまいます。 IEだと表示されます。 これはどこか設定を変えたりして直りますか?

  • .htaccess の RewriteRule で、引数が10個以上あ

    .htaccess の RewriteRule で、引数が10個以上ある場合の書式について .htaccess に、下記のように記述をしています。 長ったらしいですが、要するに引数を16個渡したいのです。 RewriteRule ^example_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+).html$ example.php?VAR01=$1&VAR02=$2&VAR03=$3&VAR04=$4&VAR05=$5&VAR06=$6&VAR07=$7&VAR08=$8&VAR09=$9&VAR10=$10&VAR11=$11&VAR12=$12&VAR13=$13&VAR14=$14&VAR15=$15&VAR16=$16 ですが、こう書くと、例えば「VAR16=$16」の「$16」は「$1 と "6"(文字列としての6) を連結したもの」と解釈されてしまうらしく、うまく表現できません。 10個以上の引数を渡したい場合、どう記述すれば良いでしょうか。

    • ベストアンサー
    • PHP
  • mod_rewriteの書き方について

    mod_rewriteの書き方について いつもお世話になっております。 mod_rewiteについて質問させていただきます。 複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。 -------------------------------------------------- RewriteEngine on (1) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4 [L] RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4&$5=$6 [L] (2) RewriteRule (.*)\.html$ /$1.php [L] -------------------------------------------------- 上記の設定を記載しております。 (1)はパラメーターがあった場合、URLの書き換えをしています。 ここはちゃんと動作しております。 (2)で、http://www.hoge.com/dir/index.html にアクセスした場合 /dir/index.php を呼び出すことに成功はしています。 ただ、http://www.hoge.com/dir/category.html にアクセスした場合 PHPファイルではなく、HTML(/dir/category.html)の場合404のエラーになってしまいます。 分かりづらい説明で申し訳ございませんが、ご教示よろしくお願いいたします。 [環境]  PHP:5.1.6  Linux:調べられません・・・わりと新しいバージョンです。

専門家に質問してみよう