• ベストアンサー

RewriteRuleの書き方

畏れ入ります。RewriteRuleの書き方で悩んでいます。 単純に http://url/abc としてurl配下のindex.phpにabcを渡したいのですが・・・ 例えば http://url/abc_def とアクセスした場合には RewriteRule (.*)_(.*) index.php?$1_$2 で$1にabc$2にdefが取れてきました。 しかし、_で分ける必要が無い為、 RewriteRule (.*) index.php?$1 で http://url/abc でアクセスとしてみたところ・・・ なぜか$1には「index.php」が取れてきました・・・ http://url/abc のアクセスで $1にabcが取れるようなRewriteRuleを書くにはどう書いたら良いのでしょうか?

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

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

mod_rewriteですが、特に引数を渡す必要は無いんじゃないかな?と思います。 index.phpが取れるってのも良く解かりませんが・・・ $_SERVER['QUERY_STRING']の中身がindex.phpになるんでしょうか? 不思議な現象ですね。 とりあえず、前回のスレッドに書いた、$_SERVER['REQUEST_URI']ってのを試してみてください。 index.php ---------------------------------- <?php echo $_SERVER['REQUEST_URI']; $a = split("/", $_SERVER['REQUEST_URI']); print_r($a); $b = split("_", $a[1]); print_r($n); ?> ---------------------------------- こんな感じでしょうか。

azicyan
質問者

お礼

たびたびありがとうございます。 'REQUEST_URI'を使うと取ることが出来ました・・・ ただ$1で取った方が慣れていて、楽で良いなあとおもったのですが・・・ RewriteRuleの書き方の例はたくさんあるのですが、 結構くせがあるらしく、なかなか思い通りに行きませんでした。 ほとんどのページにかかれている例のように以下のようにすると RewriteRule ^/(.*) index.php?$1 http://url/abc ではアクセスできなくなり、 なんとhttp://url//abc でabcが取れるようになりました。 なかなか難しいんですね。。。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

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

詳しくないですが、Condition挟んでもダメでしょうか? RewriteCond %{REQUEST_URI} !(index.php) RewriteRule (.*) index.php?$1

azicyan
質問者

お礼

試してみます。 書き込みありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • RewriteRuleの書き方

    いつもお世話になっております。 プログラムはある程度かけるのですが、サーバー周りが全く無知です。 .htaccess についてご教授願います。 RewriteRuleで二重で実行するにはどうしたら宜しいでしょうか。 [既存のRewriteRule] RewriteRule ^(.*)__(.*)/.*\.html$ /php/index..php 上記実行後、templateでindex.htmlとなります。 それを再度Rewriteしたいと思っています。 追加で下記を記述しましたが、うまくいきません。 RewriteRule ^(.*)__(.*)/index.html$ /$1/$2/index\.html [L] お手数ですが、宜しくお願い致します。

    • 締切済み
    • PHP
  • RewriteRuleについて

    RewriteRuleについて教えてください。 いままでhtmlだったのをphpに直しました。 通常であれば、 RewriteRule ^(.*)\.html$ /$1\.php [L,R=permanent] と書けば、自動的に***.html → ***.phpに変更になります。 これで問題はないのですが、 ディレクトによっては、すべてphp化していません。 特定のディレクトリ(hoge)にアクセスした場合のみ拡張子をphpに変更したい場合の書き方をお教えください。 以下では動きませんでした。 RewriteRule ^/hoge/(.*)\.html$ /$1\.php [L,R=permanent]

    • ベストアンサー
    • CGI
  • .htaccessのRewriteRuleについて

    RewriteRuleを用いて ・条件1.PHPで開発したホームページを表示しつつ,index以外の直リンクを禁止 ・条件2.ルートディレクトリ/phpMyAdmin/と指定した時はphpMyAdminに接続 と言うルールを書きたいのですが, RewriteRule ([^\/].*)\.php$ /index.php?mjs=$1 [L] RewriteRule ([^\/].*)\.php\?.*$ /index.php?mjs=$1 [L] RewriteRule ^$ /index.php?mjs=login [L] で条件1が満たせました. ここで,条件2を満たすために RewriteRule ^/phpMyAdmin/(.*)$ /phpMyAdmin/(.*)$ [L] と追加したら/phpMyAdmin/index.phpに飛ぶはずが/phpMyAdmin/login.phpへと飛んでしまい,「このアドレスへのリクエストに対するサーバのリダイレクト設定がループしています。」とエラーが帰ってきてしまいました. 仕事の合間にかれこれ一週間近く調べては居るのですが,どうすれば条件2が満たせるようになるのか,解決の糸口が見つかりません. 何方か,御助言頂けないでしょうか. 宜しくお願いします.

  • .htaccessでRewriteRule

    .htaccessでパラメータ付のアドレスにRewriteRuleしたいのですが。 例えば test.phpにアクセスされた場合、test.php?id=5 としたいのですが。 現状、下記のように.htaccessに記述したのですがうまくいきません。 RewriteEngine On RewriteRule ^test.php$ /test.php?id=5 [R=301,L] また、test.phpにはパラメータ付(test.php?id=1)でアクセスされる場合もあります。 その場合には、test.php?id=1のままにしたいのですが。 どのように記述したらよろしいのでしょうか。

  • ApacheのRewriteRuleについて

    ApacheのRewriteRuleで困っています。 以下のURLを /gr/15bd60625f36edee4051b82e021d7a7f1137487409.php?categoryID=1&TitleID=38 このようなURLに置き換えて実行させようと思っています。 /grco/index.php?cat=1&id=38 mod_rewriteを導入し(動作確認済み) Apacheのhttpd.confに以下の定義を追加しいろいろと やっていますが・・うまくいきません。 URLの?がうまく処理できていないようです。 引数部分の置き換えができていません。 RewriteRule ^/gr/(.*)(.\.php)([^\?]*)(.*)$ /grco/index.php?cat=$1&id=$2 [L] 何か指定に問題があるのでしょうか? お手数ですが、ご存知の方がいらっしゃいましたら アドバイス等いただければと思います。 よろしくお願いします。

  • .htaccessのRewriteRuleの設定

    Sabelというフレームワークでtest用プロジェクトを作成して、 testフォルダ  addonフォルダ  appフォルダ     ・     ・     ・  publicフォルダ   .htaccessファイル というフォルダ構造で、publicフォルダの中に.htaccessファイルがあり内容は [.htaccessファイル] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} \/\..+$ RewriteRule .* /notfound [R,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !\.(js|ico|gif|jpg|png|bmp|swf|css|html)$ index.php [QSA,L] </IfModule> URLからのアクセスは、 http://localhost/test/public/index.php/index/index と入力するとちゃんとindexコントローラのページが表示できます(http://localhost/test/public/index.phpでもアクセスできます) ですが自分としては、 http://localhost/test/public/index/index とindex.phpを抜かしてアクセスさせたいのですが、 この.htaccessファイルのままでは、 「404 Not Found 該当するページが見つかりません。 ページは削除されたか、移動された可能性があります。 」 のページになってしまいます・・・ なにを記述すればindex.phpなしでアクセスできるようになるのでしょうか? Sabel ドキュメントとか(非公式) http://ebine.org/sabel/doc/index.html

    • 締切済み
    • PHP
  • .htaccessのRewriteRuleエラー

    PHPのフレームワークを使って、サイトを作成しているのですが、 .htaccessの設定でつまずいております。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php 上記のコードはフレームワークを使う時の お決まりのようなコードなのだと思うのですが、 これはコピペして問題無く動作しております。 ※このコードは下記ページのものをコピペしました。 http://www.yiiframework.com/doc/guide/1.1/ja/topics.url#sec-7 しかし、この既存の.htaccessファイルに下記の通り、 www無しのアクセスをwww有りのurlに転送させるための コードを追加すると、サイト内のリンクが切れてしまいます。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} ^mydomain.com //これを追加した RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] //これを追加した RewriteRule . index.php 記述方法が誤っているのだと思うのですが、どのように記述すれば、 正常に動くのでしょうか?

    • ベストアンサー
    • PHP
  • RewriteRule の使い方がわかりません(>_<)

    ~.com/abc/ の (1) RewriteEngine On RewriteRule ^(a).html?$ $1.cgi [L,T=application/x-httpd-cgi] としたところ /。。。/a.cgi (内部でのパス) ・Not Foundとか、 ・You don't have permission toだとか  エラーがでるのですが (2) RewriteRule ^(b).html?$ /abc/a.cgi とかだと きちんと表示されます (1) をきちんと 設定したいのですが どうやって設定するのですか? もしかして  書き換えたアドレスは ドメインからの urlとして 記述しないといけないのですか?

  • RewriteRule について

    RewriteRule ^([0-9]+)/$ shop.php?&category=$1 このように書きました。 http://aaa.ccc.jp/shop.php?&category=$1 http://aaa.ccc.jp/$1/にアクセスしうまくいったのですが、Internet Explorerの履歴からアクセスするとhttp://aaa.ccc.jp/$1にアクセスしページが表示されません。どうしてでしょうか?最後の/がつかないのですがお教えできないでしょうか?

    • 締切済み
    • PHP
  • .htaccessのRewriteRuleの記述

    .htaccessのRewriteRuleの記述方法について質問です。 以下のようなURL移転があったので、RewriteRuleを記述したいのですが、どのように記述すればよろしいでしょうか? 【旧URL】 http://example.com/hoge/hoge.php?id=数字 【新URL】 http://example.com/foo.php?var=1&id=数字 ※数字は対応しています(同じページは同じ数字が入ります)。 なお、私なりにググってみて、以下のように記述したのですが、動きませんでした。 Options +FollowSymLinks RewriteEngine on RewriteRule /hoge/hoge\.php\?(.+) http://example.com/foo.php?var=1&$1 [R=301,L] また、上記のような場合は、そもそもRewriteRuleは適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。