• 締切済み

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が動作するように設定してあります。 おそらくどこかの設定でこのような現象になってしまっているのだと思いますが、 どこの設定を見たら良いか検討がつきません。 どんな些細なことでも結構ですので、助言を頂けたら幸いです。

みんなの回答

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

>(2) http://example.com/hg/list/360/01 は、 (2) http://example.com/hg/list/01/01 の間違いですよね? お書きのリライトルールで、正しく http://example.com/hg/list/01/01 にリダイレクトされるはずですが、 >(3)のようなURLになってしまい正常に書き換えが行われない。 は、何故そう思ったのですか? http://example.com/hg/list/01/01 へのアクセスは発生しているはずなので、hg や hg/list がディレクトリならそこの .htaccess 、スクリプト等ならそのスクリプトが何かしていると思われます。

noname#130824
noname#130824
回答No.1

RewriteEngine on RewriteRule ^hoge/list.asp/(.*)$ /hg/list/$1 [R=301,L,QSA]

参考URL:
http://xn--u8jxb9ib9150b2px.jp/htaccess/rewritecgi/

関連するQ&A

  • 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
  • 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の書き方について

    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:調べられません・・・わりと新しいバージョンです。

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

    タイトル通り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
  • 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

    あるレンタルサーバーで独自ドメインでサイトを運営していますが、以下のようなサブドメインの扱いを実現できる方法を探しています。 使用している独自ドメイン example.com 構成 /home/user01/www/index.html /example/index.php レンタルサーバーのエイリアス設定で「example.com」または「www.example.com」で/example/index.phpを表示するよう設定。 やりたいこと ブラウザのアドレスバーへ入力 → 実際のURL(飛ばし先) http://user.example.com/ → http://example.com/index.php?p=user http://abcd.example.com/ → http://example.com/index.php?p=abcd サブドメインは事実上クエリーなので、userの場合はとかabcdの場合はといった、事前定義的なものができません。 レンタルサーバーのためバーチャルホストは使えません。htaccessとmod_rewriteは使用可能なため、なんとかこれらで実現できないかと考えています。 これに近いことができるという表記が http://www.kawaz.jp/pukiwiki/?mod_rewrite#w1eddb33 にありましたが、自分の環境で試したところ「サーバーが見つかりません」と表示されうまく動きませんでした。最後の改行とか、そのへんのところは大丈夫です。 詳しい方、教えていただけないでしょうか。よろしくおねがいします。

  • Apache mod_rewriteの設定について

    LAMP環境でウェブサイトの制作を行っております。 (cakePHP2.6.4使用) サーバのmod_rewriteの設定を行って、URLの書き換えを行いたいと思っております。 例えば、 http://test.com でアクセスした場合、 http://www.test.com にリダイレクトするように設定することはできたのですが、 現在の状態ですと http://test.com/a でアクセスした場合、 http://www.test.com にリダイレクトしてしまいます。 できれば、 http://www.test.com/a にリダイレクトするようにしたいのですが、 どのように設定すればよいか分かりません。 お分かりいただける方いらっしゃいましたら、 ご教授のほどよろしくお願い致します。

  • RewriteRuleで動的URLを静的URLに見せたい

    ご存知の方がいらっしゃいましたら、 ご指導いただきたいと思っています。 http://example.com/hoge.do?itemNo=123456(以下"A") という動的URLのリンクを http://example.com/hoge/123456(以下"B") という静的URLに見えるようなリンクに変えようと思っています。 そして、 "B"にアクセスした場合"A"の内容をブラウザに表示しつつ、 ブラウザのURL欄を"B"のままにしたいと思っています。 そこで、httpd.confに以下の設定をして、"B"にアクセスしたところ・・・ 1行目 RewriteEngine on 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 「Web ページがみつかりません(HTTP 404 )」 が帰ってきてしまいます。 そこで試しに httpd.confの設定を以下のように変えて、"B"にアクセスしたところ・・・ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 ↓ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 [R] "A"の内容をブラウザに表示され、ブラウザのURL欄は"A"のままとなってしまいます。 どのようにしたら、本来の想定どおりの動きができるのか? 何か他の設定がおかしいのか? どなたか心当たりがあればヒントをください。 どうかよろしくお願いします。

  • mod_rewriteの設定方法について教えてください。

    mod_rewriteで下記のようにURLの書き換えの設定を行っているのですが、 実際のURL [A] http://hogehoge.com/index.cgi?a=123&b=abc ↓ アクセスするURL [B] http://hogehoge.com/123/abc/ となるように、下記のように設定を行ったのですが、 --------------------------------------------------------- RewriteEngine on RewriteCond %{HTTP_HOST} ^([^:]+) RewriteRule ^/([^\/]+)/([^\/]*) http://%1/index.cgi?a=$1&b=$2 [L,R] --------------------------------------------------------- 上記の設定を行ったうえで[B]にアクセスすると正しく[A]にアクセスは出来るのですが、ブラウザのアドレス欄は[A]のURLに変換されて表示されます。 これを[B]の表示のままにすることって可能なのでしょうか? もし可能なようでしたらその設定方法を教えていただけないでしょうか。 よろしくお願いいたします。 ApacheバージョンはApache/2.0.52です。