1 :nobodyさん:02/06/11 19:29 ID:wH0rV3+D
Apacheのモジュール『mod_rewrite』に関連するスレです。

基本的な内容は↓ページを読むこと。
http://japache.infoscience.co.jp/rewriteguide/
http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html

それではマターリ逝きましょう。

18 :nobodyさん:02/10/07 22:30 ID:bKtEI8Ri
 mod_rewrite について調べていたら、ここを見つけました。
 下記のことをしたいのですが、mod_rewrite でできるでしょうか?

-----------------------
 あるディレクトリ以下を呼び出すと、必ず一つのスクリプトを呼び出し、
特定ディレクトリ以下の、パス情報をパラメータとして取得することはできるでしょうか?

例:
 http://hogehoge.com/test/param1/param2

1.test/ 以下のパス情報は無視されて、hoge.php が呼ばれる。
2.test/ 以下の param1/param2 の情報を hoge.php の中で使用する。

 ちなみに tomcat では web.xml で
<servlet-mapping>
<servlet-name>
HogeHogeServlet
</servlet-name>
<url-pattern>
/test/*
</url-pattern>
</servlet-mapping>

 というような設定をして行っていました。

-----------------------------
 単純に test/* で他の場所にあるスクリプトにとばす方法はわかったのですが、
該当パスの後ろに付加されているパスを、パラメータとして渡すことができるのか
がわかりません。
 とばした先のスクリプトで、元のPATH_INFO?を参照すればいいだけかな?そもそも
参照できるのかな?
 あとで試してみます。でも経験者いたら、教えてください。

20 :hmk:02/10/07 23:28 ID:???
>>18
詳しいことはよく憶えていないので、できるとだけ言っておこう。
確か正規表現を使ったような、、、


26 :nobodyさん:02/11/07 11:24 ID:5CKaXlWW
すみません、ちょっと教えてください。
Apache2.0.43を使っています。configure時に
--enable-rewrite
で組み込んでも
--enable-rewrite=shard
で組み込んでもうまく動いてくれません。

httpd.confには
RewriteEngine On
RewriteRule ^old\.html$ new.html
と書いてテストしているのですが。

他に記述しなきゃいけないことってなんでしょう?
modules/ の下に mod_rewrite.so がないのが原因でしょうか?

50 :nobodyさん:03/11/07 22:11 ID:K7agUunN
http://www.example.com/foo/bar/fuga/hoge/
にアクセスされた場合、実際には
http://www.example.com/index.php?cat=hoge
にアクセスしてるように表示させたいと思っています。
(要は、com/以下の、途中のパス名はどうでもよく、URIの最後の/と/の間の文字列を受け取って
実際には、http://www.example.com/index.php?cat=その文字列
を表示させたく思ってます。)
で、
RewriteRule ([^/]*)/?$ /index.php?cat=$1
としたら、うまくいきました。

ただ、そしたらこんどは、
http://www.example.com/phpMyAdmin/
みたいなものまでこれを解釈してしまうようになってしまいました・・
(そりゃそうだ)
で、たとえば「phpMyAdmin」「Analog」「xoops」の、
ディレクトリ配下の場合にアクセスされたときにだけ、
この「mod_rewriteを無効にするには、どうすればいいのでしょうか?


76 :nobodyさん:05/01/09 21:13:14 ID:???
rewriteで「/hoge/」を「nph-hoge.cgi」に移動させています。
nph-hoge.cgiはPerlで書かれたnphスクリプトで、「HTTP/1.1 200 OK」などヘッダ情報も含まれています。
nph-hoge.cgiに直接アクセスする場合には「nph-hoge.cgiの内容。」と表示された問題ないのですが、/hoge/にアクセスすると、
「nph-hoge.cgiの内容。HTTP/1.1 200 OK
Date: Sun, 09 Jan 2005 12:10:52 GMT
Server: Apache
Content-Length: 0
Connection: close
Content-Type: text/plain

」と表示されてしまいます。
これを表示させないようにするにはどうすれば良いでしょうか?

80 :nobodyさん:05/01/12 00:28:58 ID:???
Web制作板の.htaccessスレのテンプレを見れ

81 :76:05/01/13 14:33:05 ID:???
>>80
見ても分かりませんでしたorz

82 :nobodyさん:05/01/13 14:35:11 ID:???
>>81
じゃ、潔く諦めろ

83 :76:05/01/13 16:05:37 ID:???
>>82
nphにヒットする部分は一通り読んだつもりだけど、この問題に関係しそうなところが見つかりませんでした。
大体は30*redirect関係で・・・
諦めきれないので、誰か情報お願いします

RewriteRule ^test$ nph-test.cgi [T=application/x-httpd-cgi,L]
こんな設定にしてるけど間違ってるから動かないんだよなorz

86 :nobodyさん:05/01/14 22:57:22 ID:???
>>83
WindowsXP+Apache1.3.27でやってみたけど、特に問題なかったよ。

87 :83:05/01/14 23:54:32 ID:???
>>86
鯖がFreeBSD+Apache2なのがいけないのかなぁ。。。
でも、レン鯖だからどうにもできないorz

>>80さんのはどこを見れば・・・

95 :nobodyさん:05/02/06 15:47:21 ID:Vt8tOhSv
http://www.example.com/hogehoge/hage=hage/fuga123fuga/

http://www.example.com/main.php?hogehoge/hage=hage/fuga123fuga/

とするにはどう書けばいいんでしょうか?

96 :nobodyさん:05/02/06 15:54:47 ID:???
>>95
.htaccess質問コーナー Part3
http://pc5.2ch.net/test/read.cgi/hp/1105439192/

100 :nobodyさん:05/02/26 09:13:31 ID:LIYJX+3j
#mod_rewrite
RewriteEngine on
RewriteRule ([^/]*)/?$ /index.php?cat=$1
RewriteCond %{REQUEST_URI} !/phpMyAdmin/(.*)$
RewriteCond %{REQUEST_URI} !/webmin/(.*)$
RewriteRule ([^/]*)/?$ /index.php?cat=$1 [L]

としているのですが、URIに「.php」または「.inc」の文字が含まれている場合は、
上記のmod_rewriteを無視する、というのはどう書けばいいのでしょうか?

よろしくお願いします。

103 :nobodyさん:05/02/26 16:56:14 ID:???
!/\.php/$ こういうのは !\.php とかに書き直せばいーじゃな??い?

143 :nobodyさん:2005/08/25(木) 15:27:54 ID:???
すみません、mod_rewrite で以下のような変換は可能でしょうか?

/a/1/b/2/c/3/d/4/e/5.html

/index.php?a=1&b=2&c=3&d=4&e=5

パラメータ数は、可変にしたいのですが・・・

145 :nobodyさん:2005/08/28(日) 11:49:42 ID:???
>>143
これでどうよ。
俺のローカルでは動いたが。
RewriteEngine On

RewriteRule ^a/([0-9]+)/b/([0-9]+)/c/([0-9]+)/d/([0-9]+)/e/([0-9]+)\.html$
/index.php?a=$1&b=$2&c=$3&d=$4&e=$5 [L]

ちなみに、改行するなよ。
無保証でヨロ。

146 :nobodyさん:2005/08/28(日) 12:31:26 ID:???
>>145
あんたいい奴だな。けど143の質問ちゃんと読んでないよ。

ある程度パラメータ数の上限を決めて、個数ごとに145みたいなRewriteRuleを
書くしかないと思う。>>143

147 :nobodyさん:2005/08/28(日) 13:36:40 ID:???
RewriteRule ^(([a-z]/[0-9]/?)*)\.html$ /index.php/$1 [L]
とやってPHP側で $_SERVER['PATH_INFO'] を分解するくらいしか・・・

149 :nobodyさん:2005/08/28(日) 16:29:14 ID:???
>>143 です。
いろいろレス感謝です。
パラメータの a、b、c・・・ は固定ではなく、他の文字に変わることが
あります。例えば、page、target などです。

>>146
やはりそれしかないでしょうか。
mod_rewrite でループ処理のような形でどうにか出来れば
いいかなと思ったのですが。

とりあえず、こんな感じのを沢山書こうとしています。
RewriteRule ^(.*)/(.*)/(.*)/(.*)\.html$ index.php?$1=$2&$3=$4 [L]
RewriteRule ^(.*)/(.*)\.html$ index.php?$1=$2 [L]

150 :147:2005/08/28(日) 17:47:22 ID:???
>>149
そういや[N]があったな、忘れてた

RewriteRule ^([a-z0-9]+)/([a-z0-9]+)\.html index.php?$1=$2 [L,NC,QSA]
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/(.+)\.html $3.html?$1=$2 [N,NC,QSA]

217 :nobodyさん:2007/05/25(金) 00:26:35 ID:4kvXKUJV
ちょっと質問なんですが
http://example.com/hoge/hage/
hogeというディレクトリが無ければ
http://example.com/index.php にリダイレクト
あれば
http://example.com/hoge/ をそのまま表示させたいのです。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

上記のようにやってみたのですが、ディレクトリが存在しようが無かろうが
すべてhttp://example.com/index.phpにリダイレクトされてしまいました。
いったいどこが間違っているのでしょうか?

254 :nobodyさん:2007/10/25(木) 12:12:54 ID:???
googleの様な検索URL設定を自分のサイトでも実現したいのですが・・・うまくいきません。
例)ttp://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=2ch&num=50

○現在の.htaccessの設定
RewriteEngine on
RewriteRule ^([0-9A-Za-z)]+)$ /index.php?mode=$1
RewriteRule ^([0-9A-Za-z)]+)\?(..*)$ /index.php?mode=$1&$2

○検索画面TOPページ(キーワードや表示数を設定し、検索ボタンで検索開始)
アクセス ttp://www.hogehoge.jp/search
内部   index.php?mode=search ←実現済み

○検索結果表示ページ(検索TOPで設定した検索結果を表示)
アクセス ttp://www.hogehoge.jp/search?q=2ch&num=50
内部   index.php?mode=search&q=2ch&num=50 ←これがうまくいかない
                      q=キーワード, num=検索表示数

 問題は、検索結果表示ページでGET値が渡されず、"index.php?mode=search"となってTOPへ戻ってしまうこと。
 mod_rewriteって"?"以降を無視してしまうのでしょうか?
 だったら、googleは"search?***"をどう実現してるのでしょうか?

どうかご意見ください。

265 :nobodyさん:2007/11/29(木) 11:22:36 ID:oBkh+T4G
すみません、質問させてください。
/から始まる絶対パスで開発を進めていたのですが、一時的にサブフォルダ内で
動作させる必要が出てきました。
/img/top/title.gif"
のように記述しているリンクをRewriteを使い、
/hoge/img/top/title.gif"
と変更することってできますか?

ご存知の方、教えて頂けると助かります。

266 :nobodyさん:2007/11/29(木) 21:56:07 ID:???
mod_rewriteは何か出来ると思ってるんだw

環境もあるみたいだし、やってみれ

267 :265:2007/11/30(金) 10:28:04 ID:cjIfOe/2
>266

いろいろ調べて、こんか感じでそれっぽい感じにできました。


Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_REFERER} http://hoge.jp/hoge/(.*)$
RewriteRule (.*) /hoge/$1 [R,L]

312 :nobodyさん:2008/11/21(金) 11:03:56 ID:/EsDW5qx
質問させてください
今、Windows XP apache2 でmod_rewriteをはじめて使ってるんですが、
ループを繰り返してエラーしてしまっています。

●httpd.conf は以下のようになっていて、
LoadModule rewrite_module modules/mod_rewrite.so
#mod_rewriteしたときのログを残す
RewriteLog logs/rewrite.log
RewriteLogLevel 9

●localhost/.htaccess の中は
php_flag magic_quotes_gpc off
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

となっています。
しかし、rewrite.log の中に何も書き出されません。
どこか間違っているんでしょうか?
また、念のため確認したいんですがrewrite.logのパスはどこを基準に考えたらいいんでしょうか?

314 :nobodyさん:2008/11/21(金) 11:18:31 ID:???
ログ書き出す前にRewriteEngine on は要らないの?

357 :nobodyさん:2009/01/26(月) 15:02:16 ID:???
Win上で開発しLinuxで動作させています。
>>265とほぼ同じことをしたいと思っています。

具体的に言うと

/DocRoot→静的なページのみ
 ├.htaccess→RewriteBase / のみ記述
 ├/subDir1→ここに動かしたいCGI
 │ └.htaccess→RewriteBase /subDir1 その他大量
 ├/subDir2→ここにも動かしたいCGI
 │ └.htaccess→RewriteBase /subDir2 その他大量
 :

>>267を試したところ、
HTMLはただしくリダイレクトされたのですが、画像やCSSは読み込まれませんでした。
原因はURL関連が全て/から始まる絶対パスで記述されているため
(Win上ではCGIごとにプロジェクトを分けてるからそれでよかった)なのですが
Ajaxなどの外部ファイルも使っているため
HTMLに手を加えて修正すると、既存のhtaccessとJSを修正しなければならないので
出来るだけサーバーの設定だけで実現したいと考えています。
サブディレクトリをDocRootのように振舞わせる方法をご存知でしたら
ご教授よろしくお願いします。。

400 :nobodyさん:2009/10/08(木) 18:10:15 ID:Smfgyb+J
cgiでページを表示しているんですが、「index.cgi?hoge=num」の
「index.cgi」部分を常に表示しないようにしています。

しかしフォーム投稿を繰り返すとブラウザにこの「index.cgi」が
出てしまうことがあるので、常にこの文字列を省略する方法は無いかと調べ、
mod_rewriteでそれらしいことが出来るのではと思い、お尋ねしたく…。

現在
RewriteEngine on
RewriteRule ^index\.cgi(.*)$ /$1 [R=301]

と書くと「処理がループしています」というエラーが出てしまいます

401 :nobodyさん:2009/10/08(木) 19:09:43 ID:StP417kF
>>400
ポスト先をデレクトリにしれ

418 :nobodyさん:2009/10/27(火) 02:04:24 ID:qLUEsO4U
ttp://hogemoge.com/check.phpを
ttp://hogemoge.com/check/http://foo.jp/bar/baz/でアクセスする方法をどなたか教えてください。
check.phpのみ適用されるようにしてください。
http://foo.jp/bar/baz/のところはいろいろ変わります。
http://をhttp:/と解釈されないようにしてください。
checkの部分を変えてもcheck.phpに当たるようにもしてください。
よろしくお願いします。

481 :nobodyさん:2010/02/15(月) 21:27:14 ID:???
%{SERVER_PORT}が443になってるかどうかは確認した?

482 :nobodyさん:2010/02/16(火) 09:02:50 ID:???
>>481

オス。
ssl.conf に Listen 443
httpd.conf に Listen 80

ssl.confはちゃんと読み込まれてる。
別件でパケットキャプチャ使ったんだけど、ちゃんと80、443で動いてるみたい。

なんだろうなー。よく解ってない人が管理してたサーバーの引継ぎで散々苦労
したんだけど、これが片付けば一段落つくのにドン詰まり;

547 :nobodyさん:2011/06/17(金) 14:58:09.80 ID:???
>>150 のようなことを実現したいのですがうまくいきません……

やりたいこと
http://example.com/function/test1:aaa/test2:bbb/test3:ccc

http://example.com/funtion.php?test1=aaa&test2=bbb&test3=ccc
※ hoge:hage のパラメータ数は変わることがあり、コロン左側のパラメータ名も変わります。

150の URL末尾が.htmlである点が、先頭の/function/に変わったようなものなのですが、

RewriteRule ^function/([^:]+):([^/]+)$ function.php?$1=$2 [L,NC,QSA]
RewriteRule ^function/([^:]+):([^/]+)/(.+)$ function/$3?$1=$2 [N,NC,QSA]

と指定すると無限ループに陥ってしまいます……

548 :nobodyさん:2011/06/17(金) 20:17:38.64 ID:???
なんで教えてくださいの一言が素直に言えないの?

567 :nobodyさん:2011/08/18(木) 20:21:45.52 ID:???
/domain1/aaa/. htaccess で、
/domain1/aaa/abc.html にアクセスが来た際、
/domain1/aaa/cache/abc.html が存在した場合に
/domain1/aaa/cache/abc.html の内容を返したいのですが、
うまく行きませんでした。現状の書き方です。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond "/domain1/aaa/cache/%{REQUEST_FILENAME}" -f
RewriteRule ^(.+)$ "/domain1/aaa/cache/$1" [L]

</IfModule>

正しい書き方を教えて頂けますでしょうか。

568 :nobodyさん:2011/08/18(木) 23:24:04.84 ID:???
>>567
間違ってるかもしれないが、 $1 なのかな?
${REQUEST_FILENAME} じゃないの?


http://hibari.2ch.net/test/read.cgi/php/1023791370/l50人気ブログランキングへ