• 締切済み

.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のままにしたいのですが。 どのように記述したらよろしいのでしょうか。

  • HTML
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

$_GET['id']を見て無ければtest.php?id=5へリダイレクト。 test.php?id=1はそのままであればhtaccessを使わず、以下のような感じでうまくいきませんかね? if ( !isset($_GET['id']) ) { header('Location:test.php?id=5'); exit; }

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

それって$_GET["id"]をチェックしてissetされてなければ5を割り当てた方が 楽なのでは?

rabu_chihaha
質問者

補足

その通りなのですが、 phpを知らない人が、一時的にその仕様で利用し、 必要がなくなれば、htaccessファイルを削除するだけにしたかったので・・・。

関連するQ&A

  • htaccessで個別に301リダイレクトする方法

    今回はじめてhtaccessにリダイレクトをしようと思っています。 ページごとに個別で行いたいと思っていますが パラメーターがつくとうまく動作してくれません。 RewriteEngine on RewriteRule ^whatis.php$ http://new.com/whatis.php [R=301,L] RewriteRule ^category/$ http://new.com/category/ [R=301,L] RewriteRule ^category/test.php?id=1$ http://new.com/category/test.php?id=1 [R=301,L] RewriteRule ^category/test.php?id=2$ http://new.com/category/test.php?id=2 [R=301,L] 1行、2行目の RewriteRule ^whatis.php$ http://new.com/whatis.php [R=301,L] RewriteRule ^category/$ http://new.com/category/ [R=301,L] はうまく動作していくれますが 3行、4行目は うまく動作してくれません。 どうのように記載したらパラメーター付きでも動作してくれますか? 詳しい方よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • .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は適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。

  • .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
  • .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について

    いつもお世話になっています、mahimahi02です。 .htaccessを使ったよくある書き換えなのですが、なぜかうまくいきません。 内容: ドメイン/dir/manager/menu1.htmlというURLで ドメイン/dir/manager.php?menu=1を実行したい。 現在のdir内の.htaccess: RewriteEngine on RewriteRule ^/manager/menu([0-9]+)\.html$ /manager.php?menu=$1 [L] 症状: そもそも動いていないように見受けられる。 直接、ドメイン/dir/manager.php?menu=1をたたけば$_GET['menu'] == 1 として正常に解釈されているが、ドメイン/dir/manager/menu1.htmlをたたくとvar_dump($_GET)内が空になってしまっていてその他の表示になってしまう。 サーバ会社にも問い合わせをし、mod_rewriteが正常に動いていることは確認したのですが、記述なども含めて対応策がお分かりになる方がいらっしゃいましたら是非ご教授願います。

    • 締切済み
    • PHP
  • Apache2.0.54にてRewriteRule内に/が含まれるパスが認識されない

    お世話になります。 TOCMAT5.0.3/Apache2.0.54 の環境にて 特定ページへのアクセスが来た際にsslにてアクセスを行いたく 以下のような設定を行いました。 .htaccessにて --------- RewriteEngine on RewriteBase / RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^test/test.html$ https://%{SERVER_NAME}/secure.html [R,L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^test.html$ https://%{SERVER_NAME}/secure.html [R,L] --------- test.htmlでアクセスすると正常にリダイレクトが行われるのですが RewriteRule内に「/」が含まれているものはうまく動作しません。。 以下のようなパスに変更などして試しているのですがうまくいきません。 ^test\/test.html$ ^test//test.html$ ^test/*$ 他のサーバーにて、同様のRewriteRuleは正常に動作しますので、 mod_jk.conf httpd.conf の設定に不備があるように考えていますが検討が付きません。 ご教授よろしくお願い致します。

  • .htaccessでGET引数をもとにリダイレクト

    http://test.com/ というサイトがあったとして、.htaccessを用い、 http://test.com/123 というアドレスにアクセスした場合、 http://test.com/sample.php?id=123 にリダイレクトし、 http://test.com/m/123 にアクセスした場合は、 http://test.com/m/sample.php?id=123にリダイレクトさせたいと考えています。 リダイレクト後もアドレスバーのURLは http://test.com/123、あるいは http://test.com/m/123のまま維持しているようにしたいです。 id は常に数字のみで、サーバーはロリポップのチカッパプランです。 上の方は RewriteEngine on RewriteRule ^([0-9]+)$ sample.php?id=$1 としたらなんとなくできているようですが、 「m」のほうは「m」ディレクトリ内に RewriteEngine on RewriteBase /m/ RewriteRule /m/([0-9])$ /m/sample.php?id=$1 と置いても404エラーになってしまいます。 どうしたら良いのでしょうか?

    • ベストアンサー
    • HTML
  • htaccessでRewiteRule

    ホームページ移転に伴い、htaccessにて301リダイレクト処理をしようと思い、下記の通り記述しました。 RewriteEngine On RewriteRule ^test/sample.php?flg=1&page=ex http://www.sample.jp/ex/ [R=301] や RewriteRule ^test/sample.php?flg=1&page=(.*) http://www.sample.jp/$1/ [R=301] としても、転送されません。 下記のようにするとsample.phpにアクセスした場合転送されます。 RewriteRule ^test/sample.php http://www.sample.jp/ex/ [R=301] 引数で転送先を変えたいのですが、どのようにしたらいいでしょうか。

  • .htaccessの設定方法について

    .htaccessの設定方法について ■やりたいこと 「ドメイン/html/test.html」にアクセスしたらtest.phpを表示したい ■.htaccessの内容(ドメイン/html/に設置) RewriteEngine on RewriteRule ^test.html$ test.php ■現在の状況 IEのアドレスの所に「ドメイン/html/test.html」とアドレス表示 「Webページがみつかりません」が表示される 記述方法が間違っているのでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • htaccessのRewriteRuleの正規表現

    htaccessファイルのRewriteRuleの記載方法で悩んでいます。 実現したい事は以下の2つの動作ですが、(1)は出来たのですが、(2)で困っています。 なお、{user_name}は"?"を除く半角英数文字と-_で構成されています。 (1)Twitterのようにドメイン名以後にユーザ名がある場合はindex.phpにGETのuserでuser_nameを渡す http://hogehoge.com/{user_name}  ↓ http://hogehoge.com/index.php?user={user_name} (2)ユーザ名表示の際にオプションがある場合("?"以後)は、そのまま変換先URLの最後尾に記述する http://hogehoge.com/{user_name}?option1=ok  ↓ http://hogehoge.com/index.php?user={user_name}&optione1=ok 現状以下のようにhtaccessを考えましたが結果NGでした。 RewriteEngine on RewriteRule (.+)[?](.+)$ index.php?mode=user&screen_name=$1&$2 [L] RewriteRule (.+)$ index.php?mode=user&screen_name=$1 [L] よろしくお願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう