トップページ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

それではマターリ逝きましょう。
0176nobodyさん2006/04/06(木) 08:11:14ID:???
>>175
$rewriteUrl = "http://hoge.go.jp/". urlencode($param). "/";
0177nobodyさん2006/04/06(木) 08:59:39ID:???
>>176
あー、なるほど、mod_rewriteにはurlencodeを2重に仕込むのね。
mod_rewriteを延々と弄っててきがつかんかった。
確認取ったところ上手く動きました。
この方法でやってみます。サンクス。

しかしmod_rewrite側での対応は設定はやはり難しいのかなぁ・・・
PHPに入ってくるエンコード状態と出て行くエンコード状態がrewrite使う使わずに関わらず
同じであれば見通しがいいかなーとか思ってたので。
0178nobodyさん2006/04/22(土) 02:52:49ID:IkBNOhRq
フラグのQSAは、マニュアルに

>このフラッグは、置き換えるのではなく、存在するものに対して、
>rewrite エンジンが代用文字列にあるクエリー文字列にアペンドするようにします。
>rewite ルールでクエリー文字列にデータを追加したいときに使ってください。

とあるのですが、実挙動としてどのようになるのか、よくわかりません。
いったいどうなるのでしょうか?
0179nobodyさん2006/04/22(土) 13:58:50ID:???
>178
読んで字の如くそうなる。
0180nobodyさん2006/04/23(日) 02:46:10ID:???
いや、だからその、言葉の意味がわかにくいので・・・
実挙動としてどうなるのか、サンプルなどがあるとわかりやすいんですけど、、
0181nobodyさん2006/04/24(月) 11:05:56ID:Z/7vX4oM
/hoge/modname/ReserveForm.do

/hoge/modname/index.php?ReserveForm

といった感じにrewriteしたいのですが、どうもうまくいきません。
RewriteRule !hoge/([^/]+/)ReserveForm\.do $1/index.php
とやるだけで、internalエラー(無限ループ)になります。

modnameの部分を$1に置換するにはどうやればいいのでしょうか。
0182nobodyさん2006/04/24(月) 12:34:14ID:???
>>181
modnameを置換する必要はないようだけど例文の間違いですか
0183nobodyさん2006/06/12(月) 02:24:24ID:???
>>143 みたいなことしたいのですけど、やはり決定的な方法ってありませんかね。。。
0184nobodyさん2006/06/12(月) 05:04:50ID:???
>>150 に書いてありましたね。。。
すみません。。。
0185nobodyさん2006/06/15(木) 09:05:30ID:p9raRrGD
Apache1.3.3, Win2000SP2で、バーチャルホストでMovableTypeを運用してます。

Tagを、http://domain.tld/tags/tagname
という形で作れるようにできたまではいいのですが、
http://as-is.net/blog/archives/001020.html を参考に .htaccessに

RewriteEngine on
RewriteRule ^tags/(.*)$ /cgi-bin/mt/mt-xsearch.cgi?blog_id=2&search_key=Tagwire&delimiter=,&search=$1 [QSA,L]

と指定してるのですが404エラーが出てしまいます。

実際に飛んでほしい先は
http://domain.tld/cgi-bin/mt/mt-xsearch.cgi?blog_id=2$search_key=Tagwire&delimiter=,$search=tagname
です。

RewriteRule aaa.html bbb.html
などと実際に存在するbbb.htmlに向けてaaa.htmlを呼び出してテストすると表示されますので
mod_rewrite自体は動いてます。

見直す点等アドバイスいただければ幸いです。
01861852006/06/15(木) 09:07:01ID:???
すみません、タイプミスありました。

実際に飛んでほしい先は
http://domain.tld/cgi-bin/mt/mt-xsearch.cgi?blog_id=2$search_key=Tagwire&delimiter=,&search=tagname
です。
0187nobodyさん2006/06/24(土) 20:11:15ID:usPjod1h
http://www.hogehoge.comhttp://hogehoge.com/main/
に書き換えたいのですが、
どうすればいいのですか?
0188nobodyさん2006/06/25(日) 09:19:26ID:???
RewriteRule ^$ http://hogehoge.com/main/
0189nobodyさん2006/07/29(土) 17:15:32ID:???
こんなことをしたいのですが、500 Internal Server Errorになります。
httpdはRHEL3のインストーラーにしたがって、そのままインストールしました。

http://www.domain.com/http://www.google.co.jp

RewriteEngine on
RewriteRule (..*) $1 [L]

http://www.google.co.jp

アドバイスをお願いします。
0190nobodyさん2006/08/01(火) 20:44:39ID:???
>>189
R オプションでリダイレクトじゃまいか?
[R,L]
0191nobodyさん2006/08/07(月) 16:21:58ID:???
JVNVU#395412
Apache httpd の mod_rewrite モジュールにおけるバッファオーバーフローの脆弱性
ttp://jvn.jp/cert/JVNVU%23395412/index.html

何が悪かったの?
0192nobodyさん2006/08/19(土) 09:19:31ID:AnvEHxgI
鯖は逆引き設定にしてあります。
逆引きできない人を別アドレスへ飛ばしたいのですが
「REMOTE_HOSTが数字だけの時」という条件はどう書けばいいでしょうか?

またproxy接続の人をmod_rewriteだけでなるべく効果的に(完全でなくてもいい)
別アドレスへ飛ばしたいのですがどの環境変数にRewriteCondをどう書けばいいでしょうか?
初心者ですがよろしくお願いします。
0193nobodyさん2006/08/29(火) 18:50:13ID:qBkjqVym
http://example.com/hogehoge を
http://example.com/?hogehoge
にリダイレクトさせるために、.htaccessに
RewriteEngine on
RewriteRule ^(.+)$ /?$1 [L]
と書いたのですが、500エラー出てうまくいきません。
アドバイスお願いします・・・
0194nobodyさん2006/09/05(火) 21:59:51ID:Hy3lSiWg
質問です。

使っているサーバーにて、サーバー管理人さんにmod_rewriteをONにしてもらったのですが、
きちんと動作することを確認するサンプルphpや.htaccessをご存知ないですか?

サーバー管理人さんが忙しいようでなかなか連絡がつきません、
どうにか動作確認をしたいのですが。。。
0195nobodyさん2006/09/05(火) 23:49:05ID:???
>>194
動作確認の方法もわからずにそんなことをしてどうするつもりだ?
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:???
レンタル鯖屋も大変だな…
■ このスレッドは過去ログ倉庫に格納されています