トップページphp
661コメント269KB

【Apache】mod_rewriteについて語るスレ

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/06/11 19:29ID: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

それではマターリ逝きましょう。
0196nobodyさん2006/09/05(火) 23:53:40ID:Hy3lSiWg
>>195
とあるCMSプラグインを説明書に従ってインストールします。
0197nobodyさん2006/09/06(水) 16:18:20ID:???
管理人も大変だな
0198nobodyさん2006/09/06(水) 16:50:16ID:???
>>197
そういわれると思ったよ。

標準的な他サーバー3つでプラグイン動いてるし、
プラグインの動作に必要なのはmod_rewriteのみだし。
CMSの動作は他にいれたサイトがずっと安定してるし。

こっちが大変だと思ってるけどもう実装は諦めた。
断る。
0199nobodyさん2006/09/06(水) 22:30:09ID:ogWsQap5
ねぇ。誰かmod_rewriteエミュレータつくらね?

入力文字列(URL)を入力したら
htaccessにしたがって
どうURL変換されるか表示されるの。

そうすれば大幅に敷居が下がると思うんだけど。
0200nobodyさん2006/09/07(木) 09:25:25ID:???
>>199
> mod_rewriteエミュレータ作ろうと思うんだけどどうよ?
> 入力文字列(URL)を入力したら
> htaccessにしたがって
> どうURL変換されるか表示されるの。
> そうすれば大幅に敷居が下がると思うんだけど。

すっげぇ期待してます。
0201nobodyさん2006/09/07(木) 17:01:33ID:???
勝手に変わってるw
まあ便利だろうけどdebug onにすれば大体事足りるからね
0202nobodyさん2006/10/21(土) 03:17:29ID:KzoqADxq
mod_jk2でapacheとtomcatを連携しています。
mod_rewriteを使って、tomcat上で動くstrutsを用いたアプリの
URLを書き換えようとしているのですが、うまくいきません。。
(URLがrewriteされる前に、tomcatのほうに制御がいってしまい、うまく書き換えられない)

どこを設定すればよいでしょうか?
0203nobodyさん2006/10/22(日) 17:32:12ID:???
mod_rewriteエミュレータまだですか?
0204nobodyさん2006/10/22(日) 21:14:50ID:???
最近佐賀ネタでスレ違いの書き込みが増えている。
佐賀県庁・佐賀県警・談合・痴漢・情報漏洩などの内容だ。
銀行が潰れるとしたデマが回り騒ぎが起きたこともある。
このような書き込みは慎むべきだ。

被害防止のため常駐するスレに啓蒙してくれ。
0205nobodyさん2006/12/14(木) 00:36:31ID:HPgduaQo
坊やな質問させてもらうで酢

mod_rewriteのRewriteRuleでprofile.cgiからprofile.htmlへURLの書き換えをしようとしてるで酢
書いたルールが以下の通りで酢

RewriteRule ^(.*)\.cgi?(.*) $1.html?$2 [L]

でも「profile.htmlなんてねぇよ」って狐火に言われるんで酢
mod_rewriteってURLだけの書き換えって出来ないんで酢か?

回答お願いしま酢
0206nobodyさん2006/12/14(木) 14:03:45ID:???
クライアント側を騙すことは出来ない
0207nobodyさん2006/12/14(木) 18:14:19ID:???
>>206
まじで酢か。
じゃあソース直接書き換えるしかないで酢ね。
ありがとうで酢
0208nobodyさん2006/12/15(金) 02:34:56ID:???
cgi と html が逆なだけだろw

htmlにアクセスしたときcgiを実行するようにすればいいんだよ。
0209nobodyさん2006/12/16(土) 00:15:59ID:???
.htacc(略
0210nobodyさん2007/03/03(土) 20:36:20ID:???
すいません。
正規表現の質問なのですが、

mod_rewriteで、
"/media.*"以外へのリクエストをすべて"/index.php"へ飛ばすにはどうすれば良いでしょうか?

宜しくお願いします。
0211nobodyさん2007/03/04(日) 12:24:43ID:???
>>210
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/media
RewriteRule (.*) /index.php [L]

!^/media の ^ はいらんかったかな…
0212nobodyさん2007/03/06(火) 13:08:27ID:???
すいません。質問させてください。
http://example.com を http://www.example.com
リダイレクトさせたいのですが、https環境になるとうまくいきません。
https用に下記のように考えてみたのですが…。

RewriteEngine on
RewriteCond %{SERVER_PORT} ^443 [AND]
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*)$ https://www.example.com$1 [R=301,L]
うまい方法はないでしょうか?
02132122007/03/06(火) 14:31:15ID:???
自己解決しました。
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*)$ https://www.example.com$1 [R=301,L]
SSL環境の設定ファイルが違いました。。。orz
0214nobodyさん2007/03/07(水) 01:06:15ID:???
([0-9A-Za-z]+) の部分にアンダーバーを入れたいのですが、_を入れてもうまくいきません。

RewriteRule ^([0-9A-Za-z_]+)/$ /index.php?mod=user&act=$1 [L]

半角英数字の正規表現にアンダーバーを入れるにはどうすればいいでしょうか?
02152142007/03/07(水) 01:09:00ID:???
自己レス
ただapacheを再起動していなかっただけぽ
0216nobodyさん2007/03/10(土) 17:38:22ID:VXyj5Dh3
index.php?p=2&mode=m&url=http://www.example.com/

で m/2/http://wwww.example.com/ として表示させることは可能でしょうか?
0217nobodyさん2007/05/25(金) 00:26:35ID: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にリダイレクトされてしまいました。
いったいどこが間違っているのでしょうか?
0218nobodyさん2007/05/25(金) 07:40:57ID:???
>>216
可能
>>217
試したらちゃんと動作したので間違ってはいないと思う
02192172007/05/26(土) 06:46:54ID:???
>>218
まじっすか。
apacheの設定に問題があるのかもしれません。
もうすこし調べてみます。ありがとうございました。
0220nobodyさん2007/05/26(土) 13:58:00ID:llpEpcc0
都合により mod_dir のスラッシュ補完が行えない環境なので、
mod_rewrite でスラッシュ補完を実現させたいと考えており、アドバイスをお願いしたいです。
※説明が長くなってしまったので、本文をいくつかに分割して投稿いたします。

○現在の状況
まず、下記の設定を追加する事で、UserDir にチルダ無しでアクセスが出来るようにしてあります。

RewriteEngine on
RewriteRule ^/([a-zA-Z0-9_\-]+)/(.*) - [C]
RewriteCond /home/$1/public_html/$2 -f [OR]
RewriteCond /home/$1/public_html -d
RewriteRule ^/([a-zA-Z0-9_\-]+)/(.*) /~$1/$2/ [PT]
RewriteRule ^/([a-zA-Z0-9_\-]+)$ /~$1/ [PT]

上記 RewriteRule の影響で、 URLの最後にスラッシュが含まれていない場合、mod_dir のスラッシュ補完が行われません。


・例 test ユーザのディレクトリでアクセスした場合
本来であれば下記のスラッシュ補完が行われるはずだが、実際にはスラッシュ補完が稼動しない。

http://www.xxxx.net/test

http://www.xxxx.net/test/ とさせたい

ちなみに、チルダ有りでアクセスすると mod_dir のスラッシュ補完は問題なく行われる事を確認済です。

http://www.xxxx.net/~test を

http://www.xxxx.net/~test/ となる。
0221nobodyさん2007/05/26(土) 13:59:31ID:llpEpcc0
○実現させたい事
UserDir のサブディレクトリへチルダ無しでアクセスした場合にも、スラッシュ補完が行われるようにしたい。

色々試した結果、下記のように書き換えると UserDir のルートディレクトリだけはスラッシュ補完が行えるようになりました。

・設定
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9_\-]+)$ $1/ [R]
RewriteRule ^/([a-zA-Z0-9_\-]+)/(.*) - [C]
RewriteCond /home/$1/public_html/$2 -f [OR]
RewriteCond /home/$1/public_html -d
RewriteRule ^/([a-zA-Z0-9_\-]+)/(.*) /~$1/$2/ [PT]
RewriteRule ^/([a-zA-Z0-9_\-]+)$ /~$1/ [PT]

・下記は動作するようになった。
http://www.xxxx.net/test

http://www.xxxx.net/test/


ただし、サブディレクトリのスラッシュ補完はなされません。

http://www.xxxx.net/test/tmp

http://www.xxxx.net/test/tmp/ にならない。


サブディレクトリのスラッシュ補完を行う為には、どのように RewriteRule を書けばよろしいでしょうか。
アドバイスをお願い致します。
0222nobodyさん2007/05/29(火) 00:06:05ID:???
RewriteRule ^/([\w_]+(/[\w_]+)*)$ $1/ [R]

なんかこんな感じじゃだめかね?
適当
0223サレ2007/06/21(木) 20:21:18ID:yAR7j5RX
mod_rewriteを利用して特定のページアクセスの際にSERVER_NAMEとQUERY_STRING以降を除いて
大文字、小文字の区別なく表示させたいのですが、全くうまくいきません、いい案をお持ちの
方いたらご教示お願いしたいです。
0224nobodyさん2007/07/06(金) 23:52:39ID:???
AにきたリクエストをBにリダイレクトしたいのですが
Cのようにリダイレクト後のURLに「?t=aaa&k=bbb」がくっついてきちゃいます。
これがくっついてこないようにするにはどうしたらいいのでしょうか。

A:/search.html?t=aaa&k=bbb
B:/search/aaa/bbb/index.html
C:/search/aaa/bbb/index.html?t=aaa&k=bbb

RewriteCond %{REQUEST_URI} ^/search\.html$
RewriteCond %{QUERY_STRING} ^t=(.+)&k=(.+)$
RewriteRule ^.*$ /search/%1/%2/index.html [R,L]
0225nobodyさん2007/07/12(木) 15:02:09ID:5UK7fMyc
RewriteEngine on
RewriteCond ${REQUEST_URI} !-d
RewriteRule ^(.*hoge)/([0-9]+)/$ $1?number=$2 [L]

これでURL変換はうまくいってるんですが、ブラウザのアドレス欄には変換後の
http://〜hoge/?number=10
というのが表示されてしまいます。
これを変換前のURLのままにしておくにはどうすれば良いのでしょうか?
0226nobodyさん2007/07/12(木) 18:23:43ID:???
http://aaa.example.com/http://example.com/~aaa/に書き換えるにはどうしたらよいでしょうか?

aaa.example.comとexcample.comは同一のサーバーです。
0227nobodyさん2007/07/17(火) 16:47:55ID:???
>>266
ID。

aaaは定数? それともwwwとwww2だとか幾つかある?
0228nobodyさん2007/07/19(木) 00:53:42ID:???
質問です。よろしくお願いします。
RewriteRule /(.+)\.(.+)$ /$1.A.$2
既存の拡張子の前に.Aを挿入しようとしていますが、$2に前置するピリオドが
悪さしているらしく、うまく動きません。どうすればよいでしょうか。
02292282007/07/19(木) 01:05:11ID:k0bvHpUP
.を_などにすると意図したように動きます。といいつつあげます。
0230nobodyさん2007/07/19(木) 01:50:07ID:???
とりあえずピリオドの前には常に¥マークを付けるんだ
02312282007/07/19(木) 02:11:07ID:???
\つけてもだめでした。その前に、.$1は問題ないんですが、
.はそもそもエスケープする必要あるのが普通でしょうか。
.Aの挿入はおいといて、$1.$2もだめでしたが、$2.$1は大丈夫でした。
何か他の理由でしょうか。

とりあえず、$2にピリオドごと格納して解決しました。
が、なぜ上記のがだめなのか気になって夜も眠れません。
02322282007/07/19(木) 23:31:43ID:???
全然、別の問題のようでした。何かがループされてしまってたようです。
Rewriteの動きをよく理解できてないようですので勉強します。
0233nobodyさん2007/08/12(日) 03:55:49ID:???
mod_rewrite で下記のようなことは可能でしょうか?

http://example.com/1/       ⇒ example.com/index.php?a=1
http://example.com/1/b/2/     ⇒ example.com/index.php?a=1&b=2
http://example.com/1/b/2/c/3/   ⇒ example.com/index.php?a=1&b=2&c=3
http://example.com/1/b/2/c/3/d/4/ ⇒ example.com/index.php?a=1&b=2&c=3&d=4





パラメータは可変長で考えています。
ループを使ってすっきり書ければいいと思うのですがなかなか思いつきません。
よろしくお願いします。
0234nobodyさん2007/08/12(日) 03:59:41ID:YzqJNCOc
age
0235nobodyさん2007/08/12(日) 12:45:54ID:???
>>226
なんでそんなことするんだよwwwと思ったけどなるほど お前頭いいな
ちょっと考えてみるわ
0236JAPU ◆lVJAPUTeX. 2007/08/12(日) 19:58:53ID:???
>>233
RewriteRule ^(/.*/)([^/]+)/([^/]+)/$ $1?$2=$3 [QSA,N] ※1
RewriteRule ^/([^/]+)/$ /test/index.cgi?a=$1 [QSA] ※2

"QSA" (query string append) フラグは、書き換え後の QUERY_STRING 部分のみ "追加" の扱いとします。
"N" (next) フラグは、先頭からルールを再実行します。

path = "/1/b/2/c/3/", QUERY_STRING=""
※1のルール適用
path = "/1/a/2/", QUERY_STRING="c=3"
※1のルール適用
path = "/1/", QUERY_STRING="b=2&c=3"
※2のルール適用
path = "/index.cgi", QUERY_STRING="a=1&b=2&c=3"
0237nobodyさん2007/08/13(月) 01:26:53ID:xOKpCYRV
>>236
レスどうもです!

ちょっとうまく動かなかったので最初の "/" をとってこんな風にしてみました。

RewriteRule ^(.*/)([^/]+)/([^/]+)/$ $1?$2=$3 [QSA,N]
RewriteRule ^([^/]+)/$ index.php?a=$1 [QSA]

でも、下記のように変換されてしまって無限ループになってしまいました。
何が悪いんでしょうか?

1/b/2/c/3/ -> 1/b/2/?c=3
1/b/2//b/2/c/3/ -> 1/b/2//b/2/?c=3
1/b/2//b/2//b/2/c/3/ -> 1/b/2//b/2//b/2/?c=3
1/b/2//b/2//b/2//b/2/c/3/ -> 1/b/2//b/2//b/2//b/2/?c=3



0238JAPU ◆lVJAPUTeX. 2007/08/13(月) 02:57:50ID:???
.htaccess に書くと、たしかにそうなった。

httpd.conf なら問題無いんだが… 途中、こんなヘンテコな変換されるのが謎。
add path-info postfix: /usr/local/www/data/1/b/2/ -> /usr/local/www/data/1/b/2//b/2/c/3/

# ちなみに Apache 1.3.37
0239nobodyさん2007/08/13(月) 03:09:59ID:???
.htaccessはRewriteBaseが必須。
0240JAPU ◆lVJAPUTeX. 2007/08/13(月) 07:59:33ID:???
mami# grep ^DocumentRoot /usr/local/etc/apache/httpd.conf
DocumentRoot "/usr/local/www/data"
mami# pwd
/usr/local/www/data
mami# cat .htaccess
RewriteEngine on
RewriteBase /usr/local/www/data
RewriteRule ^(.*/)([^/]+)/([^/]+)/$ $1?$2=$3 [QSA,N]
RewriteRule ^([^/]+)/$ index.cgi?a=$1 [QSA]

これじゃまずいんだっけ。
0241nobodyさん2007/08/13(月) 11:17:43ID:d8YeW0fj
問題なさそうだけど。。。
0242nobodyさん2007/08/13(月) 14:05:05ID:???
RewriteBaseにセットする値はURL-path。
0243JAPU ◆lVJAPUTeX. 2007/08/14(火) 01:02:27ID:???
>>242
たしかにマニュアルみたらそう書いてありました。
が、RewriteBase / でも結果は変わらず。
0244nobodyさん2007/08/14(火) 01:45:16ID:sYc3cRby
変換ログが怪しすぎるし、バグなのかなぁ。
0245nobodyさん2007/08/23(木) 14:25:41ID:oRh+in4w
>>233 と似てるんだけど、こういうのってどうやれば実現できますか?

http://1.example.com/        ⇒ example.com/index.php?a=1
http://1.example.com/b/2/      ⇒ example.com/index.php?a=1&b=2
http://1.example.com/b/2/c/3/    ⇒ example.com/index.php?a=1&b=2&c=3
http://1.example.com/b/2/c/3/d/4/ ⇒ example.com/index.php?a=1&b=2&c=3&d=4

0246nobodyさん2007/08/25(土) 21:04:57ID:mIpqfkg/
RewriteRule でどのパターンにも一致しない場合のルールでどうやればよいでしょうか?
0247nobodyさん2007/08/26(日) 05:40:50ID:???
YomisearchCGI版のカテゴリを静的化したいのですが、
参考になるページご存じの方教えて下さい
yomi.cgi?page=1&mode=kt&sort=ac_new&kt=01_03

/p1/kt/ac_new/01_03.html
こんな感じにしたいです
(もしくはもっと短く)
0248nobodyさん2007/08/26(日) 11:52:46ID:6oSQJEbU
>>247
このスレみるだけでじゅうぶんでは。
どこを難しいと感じているのかわからないし。
0249nobodyさん2007/10/03(水) 14:46:52ID:???
すみません質問させてください
WindowsXP SP2 Apache2.2.3でローカル鯖たててます。
mod_rewriteを使えるようにしたいのですが

・modulesディレクトリにmod_rewrite.soがあることを確認
・httpd.confのLoadModule setenvif_module modules/mod_rewrite.soのコメントアウトをはずす
・Apache再起動
の手順でやってもmod_rewriteが有効になりません。
任意のディレクトリに
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z)]+)\.html$ index.php?$1 [L]
って書いた.htaccess置いてるんですが404エラーになってしまって。

同じものをwebサーバにうpすると普通に動作するので
Apacheの設定が出来てないんだと思うのですが自分では対処不能ですorz
0250nobodyさん2007/10/03(水) 15:17:11ID:???
RewriteEngine On
RewriteRule .* index.php
まずこうしてmod_rewrite、文法どちらに問題があるのか切り分けてみなよ。

文法が間違ってるなら
RewriteLog /var/log/httpd/rewrite_log
RewriteLogLevel 9
としてログを見ながら原因を探る

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
でいけるかもしれない。
0251nobodyさん2007/10/03(水) 15:34:01ID:???
>>250
やってみたんですがあいかわらず404です…
文法間違いじゃなくてやっぱApacheの設定ミス…?
インストールしなおした方がいいんでしょうか。
0252nobodyさん2007/10/03(水) 17:31:53ID:???
.htaccessで使うときはRewriteBaseが必須。
0253nobodyさん2007/10/03(水) 18:16:18ID:???
う〜ん、
RewriteEngine on
RewriteBase /hoge/hoge/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9A-Za-z)]+)\.html$ index.php?$1 [L]
でやってみましたがうまく行きませんorz
.htaccess書き換えてもApacheの再起動はしなくていいんですよね?
0254nobodyさん2007/10/25(木) 12:12:54ID:???
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?***"をどう実現してるのでしょうか?

どうかご意見ください。
0255nobodyさん2007/10/25(木) 15:05:20ID:???
>>254
>mod_rewriteって"?"以降を無視してしまうのでしょうか?
正解
>だったら、googleは"search?***"をどう実現してるのでしょうか?
searchがスクリプトファイル名
ファイルに絶対拡張子が必要なわけではない
02562542007/10/25(木) 15:16:18ID:???
まあrewriteはなんでも出来るから
RewriteRule ^([0-9A-Za-z)]+)\?(..*)$ /index.php?mode=$1&$2

RewriteRule ^([0-9A-Za-z)]+)$ /index.php?mode=$1&%{QUERY_STRING}
で出来るかも
02572542007/10/25(木) 17:38:26ID:???
>>255,256

[QSA]を付ける事で問題を解決できました。素早い回答ありがとうございます。お騒がせしました。
0258nobodyさん2007/10/27(土) 00:37:29ID:zm9qnQ5v
女性にmod_rewriteの説明をする時って最高にセクハラできるよね('-'*)

「このように性器表現で痴漢すれば、性的なURLでアクセスできるようになります」
0259nobodyさん2007/10/27(土) 00:38:51ID:???
ほう。
0260nobodyさん2007/10/27(土) 18:02:43ID:PPo48ltM
ほうほう
0261nobodyさん2007/10/28(日) 09:25:28ID:???
> 性的なURLでセクロス

  ( ´ω`) …
  (⊃⊂)


  (´ω`;)⊃ アウアウ!!
 ⊂ミ⊃ )
  /   ヽ
0262nobodyさん2007/11/14(水) 12:06:40ID:ng0LolU1
http://www.hoge.jp/c00000001/
にアクセスした場合に
http://www.hoge.jp/search.php?cid=00000001
を実行させる環境を実現しようと思い

RewriteRule ^\/c([0-9]+)/?$ /ctgr_search.php?cid=$1

と書いているんですが
http://www.hoge.jp/c00000001
でアクセスすると正常に動作するのですが、
http://www.hoge.jp/c00000001/
と最後にスラッシュを入れると404エラーになってしまいます
スラッシュがついていてもついていなくても
同じ動作にしたかったんですけど


何が間違ってるのか見当もつかないんですが、分かる方
教えて下さい><
0263nobodyさん2007/11/19(月) 23:48:17ID:???
/ があると index.html の自動補完が先に動くのではないかと。
/index.html まで書いたり、

ファイルが無いことを条件にもっとゆるいrule を作ってみてはどうでしょう?

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule * /ctgr_search.php?cid=$1
0264nobodyさん2007/11/20(火) 10:55:41ID:???
%2f問題。
0265nobodyさん2007/11/29(木) 11:22:36ID:oBkh+T4G
すみません、質問させてください。
/から始まる絶対パスで開発を進めていたのですが、一時的にサブフォルダ内で
動作させる必要が出てきました。
/img/top/title.gif"
のように記述しているリンクをRewriteを使い、
/hoge/img/top/title.gif"
と変更することってできますか?

ご存知の方、教えて頂けると助かります。
0266nobodyさん2007/11/29(木) 21:56:07ID:???
mod_rewriteは何か出来ると思ってるんだw

環境もあるみたいだし、やってみれ
02672652007/11/30(金) 10:28:04ID:cjIfOe/2
>266

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


Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_REFERER} http://hoge.jp/hoge/(.*)$
RewriteRule (.*) /hoge/$1 [R,L]
0268nobodyさん2007/12/02(日) 08:43:40ID:???
それだとある程度自由にローカルのファイルにアクセス出来るから
Request_URIで判別した方がいいよ
0269nobodyさん2007/12/20(木) 18:10:10ID:???
http://example.com/wiki/test/test.html
のようなリクエストを受け取った時に、
/wiki/test/test.html があれば表示、なければ
/wiki/html/test/test.html があれば表示、なければ
/wiki/index.php?test/test を表示
というようにしたいんだけど、どうやったらいいのでしょう?
特に
/wiki/test/test.html をうけとって、/wiki/ と test/test.html に分離して
RewriteCond で /wiki/html/test/test.html -f
といきたいんだけど、それをどうやったらできるのかわからないのです。

/wiki/ がなく、ドメイン直下ならば、分離しないですむので、
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}html%{REQUEST_URI} -f
RewriteRule .* %{DOCUMENT_ROOT}html%{REQUEST_URI} [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.html$ index.php?$1 [QSA,L]
こんなかんじでいけるのですが。


0270nobodyさん2007/12/20(木) 21:19:10ID:???
RewriteEngine on
RewriteBase /wiki
RewriteRule   ^(.*)\.html$  $1  [C]
RewriteCond   %{REQUEST_FILENAME}.html !-f
RewriteRule   ^(.*)$ /wiki/index.php?$1 [L]

とやって
http://example.com/wiki/test1/test2.html
のようにアクセスしてみたら
みたら、index.php の引数に
test1/test2
ではなく
test1/test2/test2.html
という値が入ったのですが、これは一体どういう理屈でしょうか?
test1/test2 に分離できるかと思ったのですが。
0271nobodyさん2008/01/16(水) 16:18:40ID:???
RewriteRule ^/(.+)/(.*) /$1/index.php?i=$2
ってやったら

/aa/bb/ は /aa/index.php?i=bb
になったけど
/aa/bb/cc は /aa/index.php?i=bb/cc

変わらなかったんだけど/はだめなの?
0272nobodyさん2008/01/23(水) 22:17:35ID:iTWduqjM
http://hoge.com/aaa/?page=2http://hoge.com/aaa/index2.html
というふうに301リダイレクトしたいのですが、

RewriteEngine On
RewriteRule ^/aaa/?page=([0-9A-Za-z]+)$ /aaa/index$1.html [R=301,L]

で上手くいかないのですが、だれかご教授ねがいないでしょうか?
0273nobodyさん2008/01/24(木) 14:33:10ID:???
ねがいない
0274nobodyさん2008/01/24(木) 20:16:55ID:???
RewriteEngine on
RewriteRule ^([A-Za-z0-9-/]+)/?$ /test/$1 [L]

ってやってるんですけど、元から実在するURIが渡されるとrewriteされません。
例えば、hogeへリクエストがあると/test/hogeにrewriteされるんですが、
testへリクエストがあるとtestのままで/test/testとなってくれません。
このようにするにはどうすればいいんでしょうか。
0275nobodyさん2008/01/27(日) 15:53:17ID:???
レンタル鯖屋も大変だな…
0276nobodyさん2008/02/06(水) 01:37:13ID:???
>>271
最長一致、つまりこの場合左に現れる .+ ができるだけ長くマッチしようとする。
その結果、
$1 => aa/bb
$2 => cc
となる。

RewriteRule ^/(.+?)/(.*)$ /$1/index.php?i=$2
として最短一致にすれば期待の結果になる。
あるいは、$1 に / が含まれない仕様であれば、
RewriteRule ^/([^/]+/(.*)$ /$1/index.php?i=$2
と書けばいい。
0277sage2008/02/06(水) 13:09:37ID:cmfp+wYF
すみません、動的URLから動的URLへの書き換えで質問です。

/(dirname)/main.php?(x=XXX&y=yyy) カッコ内は動的
  ↓
/admin/main.php?dir=(dirname)&(x=XXX&y=YYY)
という感じに、要はディレクトリ名をdirという部分に渡したいのですが、
下記の正規表現で上手く動きません。

どなたかご教授いただけませんか?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)/main.php?(.*)$ admin/main.php?dir=$1&$2
0278nobodyさん2008/02/06(水) 13:10:14ID:???
↑いまさらダサすぎる失敗はスルーしてください><
0279nobodyさん2008/02/06(水) 14:21:15ID:???
自己解決。QSA便利ですね
0280nobodyさん2008/02/07(木) 20:08:01ID:L14jE359
fedora8にyumでhttpdをインスコしましたが、mod_rewrite.soが含まれていませんでした
これだけでは足りないと思い、httpd-develもインスコしましたがやはり見つかりません
yumのlistにもmod_rewriteのパッケージが見つからないのです

httpd自体をmakeしなおさないとリンクしないような気がしてならないのですが、これはwgetでmod_rewrite単体を
modulesの下に置くだけでよいのでしょうか?
よろしくお願いします

0281nobodyさん2008/02/08(金) 01:43:18ID:???
Fedora使いじゃないんで良く分からんが、
http://download.fedora.redhat.com/pub/fedora/linux/releases/8/Fedora/i386/os/Packages/httpd-2.2.6-3.i386.rpm
には ./usr/lib/httpd/modules/mod_rewrite.so が入ってるけど。

もし mod_rewrite.so がないとして、
httpd -l して mod_so.c があれば DSO 対応でコンパイルしてあるので、
所定のディレクトリにモジュールをおけばいい。
どこから wget してくるのか知らんが。
02822802008/02/09(土) 02:06:41ID:???
>>281
confファイルのある/etc/httpd/modules/の下を探していたのですが、ご指摘の場所にmod_rewrite.soが入っていました
まだfedoraのディレクトリ階層に不慣れなものでお恥ずかしいです
httpd -lも確認したところ、mod_so.cがリストされましたのでDSO対応のようです
どうもありがとうございました
0283nobodyさん2008/02/10(日) 09:37:29ID:???
>>280
ソースからビルドしたほうが楽じゃね?
0284nobodyさん2008/02/29(金) 15:31:46ID:???
IE7 で BASIC 認証されると Refer に

http://id:pw@example.com/contact/?email=test@example.com

と id:pw@ が残るので

http://example.com/contact/?email=test@example.com

のように消したいと考えています。
mod_rewrite で消す方法思いつく方いらっしゃいますか。
0285nobodyさん2008/02/29(金) 22:12:08ID:a2f9rZSr
age
0286nobodyさん2008/04/20(日) 18:57:28ID:???
CGI起動のphpをnphにしてrewriteで呼び出すとヘッダ情報が処理データの後に出てくるんだがorz
このスレ見ると>>76で同じ症状があったみたいだが、自力では解決できなかった・・・。

RewriteRule ^.*$ /nph-page.cgi [T=application/x-httpd-cgi,L]
とか、
RewriteRule ^(.+)$ xredirect:$1
RewriteRule ^xredirect:(.*) /nph-page.cgi [T=application/x-httpd-cgi,L]
とか試したんだが駄目だった。。。
アクセスしてきたURIは環境変数で受け取る予定です
助けてください
0287age2008/04/26(土) 13:59:43ID:???
age
0288nobodyさん2008/05/15(木) 20:23:59ID:???
age
0289nobodyさん2008/07/08(火) 18:33:15ID:svqzHQk4
特定のURLにアクセスがあったときにだけログを出力して
リダイレクトさせたいのですが、こういった細かい事は
スクリプトサイドでやらせるのが正しいのでしょうか?
0290nobodyさん2008/07/08(火) 19:05:19ID:???
サーバサイドじゃね
0291nobodyさん2008/07/08(火) 19:09:36ID:svqzHQk4
>>290
ありがとう
やっぱりそうですよねorz
0292nobodyさん2008/07/16(水) 14:57:36ID:XAZRRasQ
mod_rewiteを使って、
http://localhost/*/2ch.net/
で、2chが表示されるみたいなことってできませんか?

RewriteRule /\*/(.*)/(.*) http://$1/$2 [P]
といれても、だめだったし。

ちょっと、サーバーサイドスクリプトなしでxhrの穴をつきたいんで。
0293nobodyさん2008/07/16(水) 16:39:58ID:???
REQUEST_FILENAME がとれずに
本来 /var/www/test
となるものが、
/test
だけになってしまいます。
考えられる原因は何でしょうか?
0294nobodyさん2008/08/11(月) 15:59:29ID:???
RewriteRule ^\*/(.*)$ http://$1 [P]
mod_rewriteとmod_proxyが必要
0295nobodyさん2008/08/30(土) 01:18:08ID:KZbGqcdu
よろしくお願いします

現在拡張子が付いていないアクセスを、.phpとつけるだけなんですが

http://○○○.com/dir/index?id=hoge

http://○○○.com/dir/index.php?id=hoge

下記のように書いてみたのですが、動作していないです。

RewriteEngine on
RewriteRule /dir/index?(.*)$ /dir/index.php?$1

どなたかご教授よろしくお願いします。

あと、上記が成功したらapacheのログには.phpがついたログが記載されますか?
■ このスレッドは過去ログ倉庫に格納されています