【Apache】mod_rewriteについて語るスレ
1 :
nobodyさん :
02/06/11 19:29 ID:wH0rV3+D
今だ! 2ゲットォォォ!  ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ (´´ ∧∧ ) (´⌒(´ ⊂(゚д゚ つ≡≡≡(´⌒;;;≡≡≡ (G)  ̄ ̄ (´⌒(´⌒;;
3 :
3 :02/06/11 20:03 ID:???
3
4 :
氏 :02/06/11 22:12 ID:???
mod_rewriteで凝った事やってるとsendmail.cf書いてるような気分にならない? 変換中のURI文字列に空白区切りで状態を保存したりさ。
∋8ノハヽ8∈ ( ^▽^)___ −=≡≡≡〜oノハヽo〜 (つ=つ( ()−=≡≡新スレおめでとうなのれす−♪ ( ´D`) ノ 人ノ  ̄ ̄ −=≡≡≡__つ (___)__)
>4 余計なことし過ぎて、ループに陥ってしまうこともありますが、何か? Rewriteする時にContent-typeって常に text/html なんだろうか? textからimageにRewriteすると、text/html のままで image/xxx に変わらん。 環境によっては不味。 回避策あれば、報告キボーヌ。
7 :
nobodyさん :02/06/12 23:23 ID:QxWRW/Qr
>>1 見たけど、さっぱりわからん。
結局これは何なのか。
8 :
nobodyさん :02/06/12 23:44 ID:K447s2+V
RewriteMap + prg使って一定時間内の同時アクセス数制限に使ってる。 計測プログラム側はPerlだけど起動しっぱなしだから早くてイイね。 mod_proxyとの組み合わせが楽しくて好きだな。
晒し
htaccessだけの記述で帯域制限とかmax_connectionsとか設定できるようにならんかな。 mod_throttleとかはOSがUnix・Linux系しかダメだし。
>>10 無理だろう。それは、サーバー側のオーバーでかいと思わないか?
「サーバー設定」変えるようなもんだから…
age つーか、板の実力を反映したスレだな・・・。
13 :
nobodyさん :02/09/23 14:05 ID:YqX96leN
[P] 機能が好き
14 :
nobodyさん :02/09/24 16:25 ID:/2P4+h33
mod_rewriteが使えるサーバってどこがあるの?
糞スリア
16 :
nobodyさん :02/09/24 17:59 ID:cTjjUirZ
いちいち問い合わせずにわかんないもんかな
17 :
nobodyさん :02/10/02 13:14 ID:6JgGwrqz
CGIが使えるところならsystem('httpd -l')してみるとか
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?を参照すればいいだけかな?そもそも
参照できるのかな?
あとで試してみます。でも経験者いたら、教えてください。
test をディレクトリではなく、 hoge.php を test というファイルにリネームして、 .htaccess か httpd.conf で <Files test> SetType application/x-httpd-php </Files> と PHP スクリプトとして起動できるように設定しておけば、 mod_rewrite なしで PATH_INFO から情報取得できる。 あるいは、httpd.conf で Action hoge-handler /somewhere/hoge.php <Location /test> SetHandler hoge-handler </Location> としてもいいかもしれん。この場合は PATH_TRANSLATED だったかな? 以上、まったく動作確認してないので、ウソ書いてるかもしれん。
20 :
hmk :02/10/07 23:28 ID:???
>>18 詳しいことはよく憶えていないので、できるとだけ言っておこう。
確か正規表現を使ったような、、、
21 :
nobodyさん :02/10/08 01:39 ID:HuLBTBG+
>>19 ありがとうございます、試してみます。
>>20 心強いお言葉、ありがとうございます。
22 :
nobodyさん :02/10/08 01:50 ID:NmxcT/YZ
そういえば、また、新しいapacheでたね〜 アップしなきゃ。
24 :
荒川太郎 :02/10/08 10:57 ID:HuLBTBG+
>>21 >>23 めでたいことにできました。
http://hogehoge.com/redirecttest4/ で
/home/www/html/pathinfo.php
を呼び出しています。
設定は以下です。
--/usr/local/apache/conf/httpd.conf--
Action hoge-handler /pathinfo.php
<Location /redirecttest4>
SetHandler hoge-handler
</Location>
--
皆様、ありがとうございました。
25 :
hmk :02/10/08 11:43 ID:???
めでたし、めでたし。
正規表現使わなかったですね。失礼しました。
>>23 よく見てるな、暇人め。素人は牛鮭でも食ってろ。
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 がないのが原因でしょうか?
27 :
26 :02/11/07 11:34 ID:5CKaXlWW
httpd -l の結果では mod_rewrite.c は表示されます。 Compiled in modules: core.c mod_access.c mod_auth.c mod_include.c mod_deflate.c mod_log_config.c mod_env.c mod_setenvif.c prefork.c http_core.c mod_mime.c mod_status.c mod_autoindex.c mod_asis.c mod_cgi.c mod_negotiation.c mod_dir.c mod_imap.c mod_actions.c mod_userdir.c mod_alias.c mod_rewrite.c mod_so.c
>>26 mod_rewriteはちゃんと組み込まれてる。組み込まれてないのに
.htaccessではなくhttpd.conf に書いたのなら、そもそもエラーが出て
apacheが起動しない。
とりあえず、mod_rewriteに関するドキュメントをもう一度よく読み直せ。
その設定でrewriteされるはずがない。
RewriteBaseとかも設定を
30 :
26 :02/11/07 13:00 ID:5CKaXlWW
31 :
26 :02/11/07 13:46 ID:???
あ、なんかできたっぽいです。 <Directory /home/www/htdocs> </Directory> の中に書いてあげたらできました。 まだちゃんと理解してないのでちょっと整理して考えてみます。 28さん、29さんありがとうございました。
32 :
山崎渉 :03/01/15 13:46 ID:???
(^^)
33 :
山崎渉 :03/03/13 17:35 ID:???
(^^)
34 :
山崎渉 :03/04/17 12:18 ID:???
(^^)
35 :
山崎渉 :03/04/20 06:16 ID:???
∧_∧ ( ^^ )< ぬるぽ(^^)
36 :
私のお金が増えている :03/05/18 23:41 ID:c9BgLl5+
37 :
山崎渉 :03/05/22 02:00 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
38 :
山崎渉 :03/05/28 17:20 ID:???
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
39 :
山崎 渉 :03/07/15 11:14 ID:???
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
40 :
山崎 渉 :03/08/02 02:37 ID:???
∧_∧ ( ^^ )< ぬるぽ(^^)
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
42 :
山崎 渉 :03/08/15 23:00 ID:???
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
43 :
nobodyさん :03/08/16 14:03 ID:R1l09wg/
やり方知ってるけど、教えない。 マニュアルとかその辺検索もしないで教えて君なんて相手にされない
45 :
43 :03/08/16 19:57 ID:???
マニュアルなどはgoogleで検索しましたが、駄目でした。 調べたところmod_rewriteが無いと判明しました(−−
46 :
お気に入り集 ☆http://beauty.h.fc2.com/ :03/08/16 22:27 ID:grNQSJhA
>>44 もしやあなたはきのう別のスレで If-Modified-Since: について
嘘をついていた人ですか?
もしそうであれば、あなたもエラそうに説教する前に
RFC なりドキュメントなりをちゃんと読んで理解した方がいいですよ。
↑アフォ?
ほしゅ
50 :
nobodyさん :03/11/07 22:11 ID:K7agUunN
52 :
50 :03/11/09 00:06 ID:???
正規表現スレ逝ってきます
53 :
50 :03/11/09 01:46 ID:8TU+xjrC
>>50 RewriteCond %{REQUEST_URI} !/phpMyAdmin/(.*)$
RewriteCond %{REQUEST_URI} !/analog/(.*)$
RewriteCond %{REQUEST_URI} !/xoops/(.*)$
RewriteRule ([^/]*)/?$ /index.php?cat=$1 [L]
こんなでいけるとおもー。
無限ループがどこで発生してるかわからないけど、一応[L]で止めてる(と思う)。
しかし、豪勢な使い方。。
大学のサーバーの 〜USER/public_html/ がデフォでは Index 表示出来ないのですが、 .htaccess で Index 表示させています。 が、管理者がタコなのか、/icons フォルダを設定していなくって、 Index 表示で ? マークがたくさん出ていて、イヤ〜んな感じ。Alias はとめられていたので、 mod_rewrite を使ってみようと思ったのですが、うまく行きません・・・ 以下が状況です。 /icons --> /var/www にエイリアスされてるっぽい。 〜USER/public_html/.icons にアイコンの実体を置いた。 〜USER/public_html/.htaccess は以下の通り。 ------------------------------------ Options +Indexes RewriteEngine on RewriteBase /icons RewriteRule ^/icons/$ /home/USER/public_html/.icons/ [R] ------------------------------------ どうすればいいんでしょうか?教えてくりくり。
Alias と <Directory>コンテナで icon 設定できない?
/icons にアクセスされたときに読まれるのは icons の下の .htaccess だす。 ~user/public_html/.htaccess が読まれるはずがあるわけないので、 おまいさんがどんな設定しても無意味だす。管理者にお願いすべし。
58 :
55 :04/01/31 13:50 ID:???
>>56 Alias は止められてるって書いたじゃん。
>>57 おいらもそうかなと思ったんだけどさ、いくつかいじって行く中で・・
[Fri Jan 30 19:20:07 2004] [error] [client xxx.xxx.xxx.xxx] File does not exist: /var/www/icons^/home/USER/public_html/.icons
っていうのを出してて、なるほど、RewriteBase の外にアクセスできるようになれば、なんとかなりそう、と思ったんだけれど。どうかな?
いや、できたらセキュリティホールなので。 mod_autoindex の AddIcon とかを使ってアイコンの URL を変えるのが正道。
60 :
58 :04/02/01 00:02 ID:???
>>59 やってみた。
AddIconByType (IMG,/home/USER/public_html/.icons/image2.gif) image/*
[Sat Jan 31 09:49:29 2004] [error] [client xxx.xxx.xxx.xxx]
File does not exist: /opt/www/html/home/USER/public_html/.icons/image2.gif
つまりあれですね。DocRoot 外には出られないってことですね?・・・
でも 〜USER 下って、USER 権限で起動してるんじゃないんだ?
ちなみに今更ですが、HTTPD version は 1.3.27 です。
ってもうスレ違いっすね。
おとなしく管理者にメールします・・
61 :
nobody :04/03/14 16:38 ID:+av6o+/D
apache 2.0.48にて 携帯のキャリア別に(au,docomo,vodafone)というディレクトリを作成し REMOTE_ADDRをもとにそれぞれのDIRへ振り分けたいと思っています。 210.169.40.0/24 なアドレスは RewriteCond %{REMOTE_ADDR} 210\.169\.40\.* な感じでいいと思うんですが 210.196.3.192/26 なアドレスはどう記述したらいいのでしょう? すいませんが、教えてください。
63 :
nobody :04/03/15 00:16 ID:hT+Orm0+
どもです。 やはり正規表現で地道に書いていくしかないのですね・・・ ありがとうございました。
64 :
alex :04/05/05 13:53 ID:ma1zwts1
共有サーバーでのhtaccessにおけるmod_rewriteの方法について教えてください。
文章が長いので二度に分けます。
現在、(仮の名称で)
http://www.example.com (内部パスは/home/www/public_html/)
というサイトと別のサーバーである
http://www.example2.com (内部パスは/home/www2/public_html/)
というサイトを経営しているとします。
http://www.example.com/php/とアクセスすると ------------------------------
RewriteEngine on
RewriteBase /
RewriteRule (.+)$ index.php?$1
------------------------------
という.htaccessの設定がルートに置かれているので
www.example.com/index.php?/php/
というユーザーから実際のURLは見えない内部アクセスとなり、
index.phpの内部では動的なフレーム転送を行っています。
ところが、
http://www.example.com/something/ (内部パスは/home/www/public_html/something/)
というディレクトリにフレーム転送したくないコンテンツがあるので、
------------------------------
RewriteRule /something(.+) something$1 [C]
------------------------------
65 :
alex :04/05/05 13:54 ID:ma1zwts1
という記述になり、先程と合わせて
------------------------------
RewriteEngine on
RewriteBase /
RewriteRule /something(.+) something$1 [C]
RewriteRule (.+)$ index.php?$1
------------------------------
とした所、
http://www.example.com というアクセスや
http://www.example.com/something/ は正常に動作するのですが、
http://www.example.com/test/ というようなアクセスの場合表示されず、内部パス上でも
www.example.com/index.php?/test/
とならず、DirectoryIndexに基づく通常のアクセスである
www.example.com/index.php
というアクセスになっている事がわかりました。
発想を転換して、今度は404Errorを利用した環境変数のREQUEST_URIを参照して
フレーム転送する事を試した所、万事うまくいっている様に見えたのですが意外にも、
携帯端末では正常に表示する事ができません。(404 FILE NOT FOUNDと表示)
そこで、ご質問です。
どのようなRewriteRuleを記述すれば私の期待する動作となるのでしょうか?
67 :
alex :04/05/05 14:55 ID:ma1zwts1
次の場合、どのようにすればいいのでしょう?
「
http://hoge.com/*** 」の***が、先頭一致で(aaa/|bbb/)以外の場合に、
hoge.com/***をhoge.com/index.cgi?***に変換。
〔(aaa/|bbb/)の場合通常のリクエストと見なす〕
〔***は任意〕
Apacheのmod_rewriteで行い、記述は.htaccessで行う。
70 :
nobodyさん :04/08/19 12:13 ID:6Qfzg0Ay
apache1.3.27+tomcat4+mod_jk2を使用しています。 workers.propertiesは以下の様に設定しています。 [uri:*.do] ここでmod_rewriteを使用して*.doへのアクセスをすべてHTTPSにrewriteしようと しているのですが、rewriteできません。 以下の通り全リクエストをrewriteする設定にすると*.do以外はrewriteされます。(img等) rewrite前にmod_jk2により転送されてしまっているのではと思っているのですが、 このあたりの情報をご存知でしたら教えてください。
> rewrite前にmod_jk2により転送されてしまっているのではと思っているのですが、 > このあたりの情報をご存知でしたら教えてください。 その通り。Tomcat 側で SSL の設定すれば?
>>72 やるとしても新hoge.jpではなく旧hoge.comの方で設定する必要があり。
それができないのならば無理。
ソースを書き換えるスクリプトを作る方がてっとりばやい。
>>74 ありがとうございます。
ソースを書き換えるようおねがいしてみます。
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 」と表示されてしまいます。 これを表示させないようにするにはどうすれば良いでしょうか?
Content-Type: text/plain
78 :
76 :05/01/11 21:25:19 ID:???
追記。 コードと結果(ブラウザで確認できるソース部分のみ)は下記のとおりです。 情報おねがいします ↓コード -- #!/usr/local/bin/perl -w use strict; print('HTTP/1.0 200 OK'."\n"); print('Content-Type: text/plain; charset=Shift_JIS'."\n"); print("\n"); print("Test"); exit(0); -- ↓結果 -- TestHTTP/1.1 200 OK Date: Tue, 11 Jan 2005 12:22:19 GMT Server: Apache Content-Length: 0 Connection: close Content-Type: text/plain --
79 :
76 :05/01/11 21:28:26 ID:???
>>77 print('Content-Type: text/plain; charset=Shift_JIS'."\n");
↓に変更して実行しても駄目でした
print('Content-Type: text/html; charset=Shift_JIS'."\n");
--
TestHTTP/1.1 200 OK
Date: Tue, 11 Jan 2005 12:26:37 GMT
Server: Apache
Content-Length: 0
Connection: close
Content-Type: text/plain
--
なんでContent-Type: text/plainなんだろう
Web制作板の.htaccessスレのテンプレを見れ
81 :
76 :05/01/13 14:33:05 ID:???
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
ふんにゃか ふんにゃか
お揚げ
>>83 WindowsXP+Apache1.3.27でやってみたけど、特に問題なかったよ。
87 :
83 :05/01/14 23:54:32 ID:???
>>86 鯖がFreeBSD+Apache2なのがいけないのかなぁ。。。
でも、レン鯖だからどうにもできないorz
>>80 さんのはどこを見れば・・・
>>87 >>1 から全部熟読していけばいいんじゃね?
音読しろとは言わないからさ。
89 :
83 :05/01/15 00:39:51 ID:???
>>88 スレの
>>1 のサイトにあるnph関係の部分は目を通しました。
90 :
age :05/01/15 23:09:13 ID:???
age
質問させてください。 public_html以下のすべての.cgiを.htmlでアクセスさせたいのですが どのように記述したらいいのでしょうか? あと、.cgiにアクセスしても表示できないようにしたいのです。 よろしくおねがいします。
あ、すべてのじゃなくてindex.cgiだけindex.htmlでアクセスさせたいです。 m(_ _)m よろしくおねがいします。
mod_rewriteでもつかえばいいんじゃ?
95 :
nobodyさん :05/02/06 15:47:21 ID:Vt8tOhSv
97 :
95 :05/02/19 16:09:31 ID:TAHykHoC
>>96 さま
すいません。そっちできいてもレスがなかったです。
どなたか教えていただけないでしょうか?
>>97 そっちのテンプレのサイトを見ればわかるのに何もせずに聞くからスルーされる
更に言うならわからんのならカッコつけることばかり考えずに そのままのURLで書け
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を無視する、というのはどう書けばいいのでしょうか? よろしくお願いします。
>100 正規表現のお勉強はどこまで進んだの?
102 :
100 :05/02/26 14:55:39 ID:LIYJX+3j
正規表現がキモでしょうか? #mod_rewrite RewriteEngine on RewriteRule ([^/]*)/?$ /index.php?cat=$1 RewriteCond %{REQUEST_URI} !/phpMyAdmin/(.*)$ RewriteCond %{REQUEST_URI} !/webmin/(.*)$ RewriteCond %{REQUEST_URI} !/\.php/$ RewriteCond %{REQUEST_URI} !/\.inc/$ RewriteRule ([^/]*)/?$ /index.php?cat=$1 [L] とやってもうまくいかなかったもので、 (.phpで終わるURIにアクセスすると、 intermnal server error)になってしまうものでして
!/\.php/$ こういうのは !\.php とかに書き直せばいーじゃな〜い?
104 :
100 :05/02/26 19:11:26 ID:LIYJX+3j
>>103 下のようにやっても、
http://example.com/phpinfo.php が表示できないです・・・・
#mod_rewrite
RewriteEngine on
RewriteRule ([^/]*)/?$ /index.php?cat=$1
RewriteCond %{REQUEST_URI} !/phpMyAdmin/(.*)$
RewriteCond %{REQUEST_URI} !/webmin/(.*)$
RewriteCond %{REQUEST_URI} !\.php
RewriteCond %{REQUEST_URI} !\.inc
RewriteRule ([^/]*)/?$ /index.php?cat=$1 [L]
105 :
103 :05/02/26 19:25:22 ID:???
RewriteCond がOR条件なら、末尾に [OR] じゃな〜い?
106 :
100 :05/02/27 03:30:20 ID:XqwD1Bfz
いや、phpMyAdminでもwebminでもなく、拡張子がphpとかincとか入ってないものだけ、 RewriteRule ([^/]*)/?$ /index.php?cat=$1 [L] をやりたいので、AND条件だと思うのですが、、、勘違いしてます?
107 :
103 :05/02/27 13:38:08 ID:???
拡張子が .php で、且つ .inc という2つの拡張子を同時に持ち合わせている ものが存在すれば確かに AND条件じゃな〜い?
108 :
100 :05/02/27 18:48:34 ID:XqwD1Bfz
なんか、問題をわけようかと思って、↓にしたら、だめでした、、
#mod_rewrite
RewriteEngine on
RewriteRule ^example.com$ example.com/ [R]
RewriteRule ^example.com/(.*)$ example.com/index.php/$1
とやると、
http://example.com/hoge が404 not foundになってしまいます。
自分の意図としては、
http://example.com/index.php/hoge と解釈され、
index.phpのなかで$_SERVER['PATH_INFO'](この例だと「/hoge」)を
操作したいのですが・・・
AcceptPathInfo On
110 :
nobodyさん :05/03/04 03:42:48 ID:3xlEv0k9
#mod_rewrite RewriteEngine on RewriteCond $0 !^/index\.php RewriteRule ^.*$ /index.php$0 RewriteCond %{REQUEST_URI} !^/phpMyAdmin(.*)$ RewriteCond %{REQUEST_URI} !\.txt$ RewriteCond %{REQUEST_URI} !\.wml$ RewriteCond %{REQUEST_URI} !\.hdml$ RewriteCond %{REQUEST_URI} !\.html$ RewriteCond %{REQUEST_URI} !\.xhtml$ RewriteCond %{REQUEST_URI} !\.php$ RewriteCond %{REQUEST_URI} !\.inc$ RewriteCond %{REQUEST_URI} !\.html$ RewriteCond %{REQUEST_URI} !\.txt$ #RewriteCond %{REQUEST_URI} !\.gif$ #RewriteCond %{REQUEST_URI} !\.jpg$ #RewriteCond %{REQUEST_URI} !\.jepg$ #RewriteCond %{REQUEST_URI} !\.bmp$ #RewriteCond %{REQUEST_URI} !\.png$ RewriteRule ^example.com$ example.com/ [R] RewriteRule ^example.com/(.*)$ example.com/index.php/$1 ってやったら、/phpinfo.php(なかみはphpinfo関数のみ)が RewriteRule ^example.com/(.*)$ example.com/index.php/$1にひかかかってしまいます。 どこが問題なのでしょうか? あと、gifに対しては、上記の記述でただしいのでしょうか?
111 :
110 :05/03/04 04:52:45 ID:3xlEv0k9
まちがえました。これです。で、ちと質問かえさせてください。
下記で、
http://example.com/admin/にアクセスすると 、
RewriteCond %{REQUEST_URI} "!/admin" にひっかかって、URL書き換えはおきないはずなのですが、
なぜか起きてしまってます。どなたか教えていただければ幸いです。
#mod_rewrite
RewriteEngine on
RewriteCond %{REQUEST_URI} "!/phpMyAdmin"
RewriteCond %{REQUEST_URI} "!/webmin"
RewriteCond %{REQUEST_URI} "!/admin"
RewriteCond %{REQUEST_URI} "!/client"
RewriteCond %{REQUEST_URI} !\.js$
RewriteCond %{REQUEST_URI} !\.css$
RewriteCond %{REQUEST_URI} !\.txt$
RewriteCond %{REQUEST_URI} !\.wml$
RewriteCond %{REQUEST_URI} !\.hdml$
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\.xhtml$
RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_URI} !\.inc$
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\.txt$
RewriteCond %{REQUEST_URI} !\.gif$
RewriteCond %{REQUEST_URI} !\.jpg$
RewriteCond %{REQUEST_URI} !\.jepg$
RewriteCond %{REQUEST_URI} !\.bmp$
RewriteCond %{REQUEST_URI} !\.png$
RewriteCond $0 !^/index\.php
RewriteRule ^.*$ /index.php$0
RewriteRule ^example.com$ example.com/ [R]
RewriteRule ^example.com/(.*)$ example.com/index.php/$1
RewriteEngine On RewriteCond %{REMOTE_HOST} !\.jp$ [NC,OR] RewriteCond %{REMOTE_HOST} !\.bbtec\.net$ [NC,OR] RewriteCond DUMMY CONDITION RewriteRule index\.html$ - [F] こんなかんじでJPドメインとY!BB以外はindex.htmlにアクセスできないようにしているのだけど、 .comなどの禁止されているドメインでアクセスすると403のページには飛ぶけど、 ステータスは200なようなのです。 403を返したいのですが、どう書けばいいでしょうか? 14:01:24 nfo>Winsock 2.2 14:01:36 suc>sample.infoが見つかりました 14:01:36 suc>sample.info(255.255.255.0):80にconnect成功しました 14:01:36 rtn>サーバへリクエスト送信 14:01:36 cmd>GET /index.html HTTP/1.0 14:01:36 cmd>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */* 14:01:36 cmd>Accept-Charset: iso-8859-1,*,utf-8 14:01:36 cmd>Accept-Encoding: gzip 14:01:36 cmd>Accept-Language: en, ja 14:01:36 cmd>Connection: close 14:01:36 cmd>Host: sample.info 14:01:36 cmd>User-Agent: Mozilla/4.05 [en] (Win95; I) 14:01:36 rtn>サーバからのレスポンス 14:01:36 res>HTTP/1.1 200 OK 14:01:36 res>Date: Fri, 11 Mar 2005 05:01:40 GMT 14:01:36 res>Server: Apache/1.3.33 (Unix) 14:01:36 res>Content-Type: text/html;charset=Shift_JIS 14:01:36 res>Content-Length: 2260 14:01:36 res>Connection: close 14:01:36 nfo>sample.infoから切断します
RewriteRule ~([^/])+/([^/]) ?p=$1&q=$2 なら動くんですけど RewriteRule ~([^/])+/([^/])/([^/]) ?p=$1&q=$2&m=$3 となるとサーバーが見つかりませんになります。 試行錯誤した結果、$nのnが3以上のものでこうなることがわかったのですが、 このようになる制限はあるのですか?ローカルではエラーがでないのに XREAに置いたとたんエラーがでるようになりました。
114 :
nobodyさん :05/03/12 17:48:37 ID:dOpkRpqt
独り言です。apache2.0でのことです。 apacheの./configureで--enable-module=allにしていてhttpd2.0にmod_rewriteをDSOで組み込みたい↓ httpd -lでmod_so.cが入ってることを確認。 mod_rewrite.cがあるディレクトリに移動 #/usr/local/apache2/bin/apxs -c mod_rewrite.c #/usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la 2行目のコマンドで.soファイルがないと言われるので、同ディレクトリで #gcc -shared -o mod_rewrite.so mod_rewrite.o -Wc,-Wall -L/usr/local/lib -Llib で無理やり.soファイル作成。あとはできた.soファイルをapacheのmoduleにcpしてconfファイルに LoadModuleの行を追加。apache再起動→完璧
115 :
age :05/03/12 17:51:23 ID:dOpkRpqt
↑続き。 これで1日半潰しました。悩んでる人、参考にしてちょ。 httpdの2.0だとAdd_Moduleの行はいらないのかしら? いらなくて動いたんだけど、、、。
>>113 XREAのサポ板になんか書かれてた記憶がある
>>115 2からはAdd_Moduleがなくても問題ないよ
117 :
nobodyさん :2005/03/22(火) 19:14:14 ID:P/+BRSxP
nn
118 :
nobodyさん :2005/03/22(火) 19:22:05 ID:P/+BRSxP
なんかわからんなー。 httpd.conf内に、 RewriteEngine On RewriteRule ^/cgi/([0-9A-Za-z]+)/([0-9A-Za-z]+)/$ /cgi/$1.cgi?com=$2 [L] 上記のように記述してみたが、思うような動作せず(リダイレクトはするが、$2の引数がうまくいかず)。 で、記述内容を変えてみたんだが、どうも反映されていない・・・。 さらに、コメントアウトしてみたが、おもいっきりリダイレクトしてるし??? ザット、ググッてみるものの情報みつからず、 誰か助けて。
自己レス まず、あまり深く追いかけていないんだが、 MultiViews が、なんやら影響をおよぼしている様子・・・。 後、つくづく自分が情けなくなるが、 下記の中の正規表現で、[0-9A-Za-z]としているにもかかわらず、 ファイル名に、'_'使っているし・・・。 > RewriteEngine On > RewriteRule ^/cgi/([0-9A-Za-z]+)/([0-9A-Za-z]+)/$ /cgi/$1.cgi?com=$2 [L] 以上2点修正して、意図する動作となりました。 とりあえず、解決。
さくらの鯖では 使えません! 鬱...
>>121 そうみたいですね。
待ち望んでいた日が遂に...
って感じです。
123 :
nobodyさん :2005/03/26(土) 13:01:03 ID:2ysQFKh3
ヒント:$ENV{'REQUEST_URI'}
さくらの共用スタンダードで XOOPSでつくるサイトを 静的に見せる方法が分からない。 プログラム全くの素人だけど でも、XOOPSで検索エンジンに引っかかるサイトが 作りたいわけなんだけど... グーグルで調べてみたけど、 mod_rewrite使う方法だということが分かったが どういうところを編集するのが分からんわけで。
128 :
nobodyさん :2005/05/09(月) 23:38:57 ID:rb2ewZOk
129 :
nobodyさん :2005/05/10(火) 00:13:28 ID:0h89RmHc
>>128 http上ドメイン名が変われば(別のhttpサーバに変えるには)リダイレクトしないと無理でしょう
コレは無理 ブラウザ->Apache(1)->Apache(2)->ブラウザ
131 :
nobodyさん :2005/05/10(火) 18:19:16 ID:GC3gP9kT
>>130 ありがとうございます。やはり駄目みたいですね。
mod_proxyかませるしかないか・・・
132 :
nobodyさん :2005/06/02(木) 00:10:54 ID:7p4TKpYJ
DirectoryIndex hoge.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ hoge.php?var1=$1&var2=$2 [L] ------------------------------------------------------------------------------ ...../test1/test2.html という仮想アドレスにアクセスしてきた ユーザに対して、hoge.php?var1=test1&var2=test2 の結果を返したいので、上記のように.htaccessに書きましたが、 ..../test2/test2.htmlにアクセスするとページがありませんエラーに なります。他鯖だとこれでOKなのですが、さくらという鯖だと無理です。 さくら特有の何か?があるのか。上のような簡単なものでも アパッチのバージョンが違うと、動作しない。なんてことがあるのでしょうか? エロイ人、どうか教えて下さい。
([0-9A-Za-z)]+
134 :
132 :2005/06/02(木) 20:34:15 ID:7p4TKpYJ
Apache/1.3.33 Server
ですが、どうもうまくうごきません。
>>133 ありがとうございます。
そのようにやってみましたが、ダメみたいです。
さくらというレンタル鯖は
同じサイトでも2つのアドレスがあります。
一つは独自ドメイン。
もう一つは
http:// ○○.sakura.ne.jp/というアドレスです。
こういうことも関係してエラーになるんだろうか・・・
135 :
nobodyさん :2005/07/05(火) 01:22:50 ID:netfphaS
通常の使い方とは逆に、 search.cgi?dir=hoge&file=foo のようなパラメータ付きのURLを /hoge/foo/ のように書き換えたいんですが、これではうまくいきません。 RewriteRule ^search\.cgi\?dir=(.*)&file=(.*)$ /$1/$2/ いろいろ試しても ? が出てきた時点でマッチしないように思います。 ご存知の方、ぜひご教示お願い致します。
ルールの左右逆じゃね?
137 :
135 :2005/07/06(水) 01:13:05 ID:???
>>136 はい、通常のmod_rewrite利用法とは逆の書き換えを
実現したいんです。
/hoge/foo/ を search.cgi?dir=hoge&file=foo みたいな
書き換えはきちんと動作するサーバ環境です。
気長にお待ちしております。
138 :
nobodyさん :2005/07/15(金) 10:24:40 ID:yoPQBliE
140 :
nobodyさん :2005/08/05(金) 23:22:02 ID:euh07aXu
こんばんは。ドメイン直下のディレクトリをキーに検索結果を 表示する書き換えを行いました。 RewriteRule ^([^/]+)/$ /search.cgi?key=$1 [L] /hoge/ でアクセスすると search.cgi?key=hoge を返します。 続いて /hoge のようにディレクトリにスラッシュがない場合に、 スラッシュを補完しようと思って、以下のように書き換えると 無限ループを起こします。 RewriteRule ^([^/]+)$ /$1/ [R=301,L] どう記述したら良いでしょうか。ご教示お願いいたします。
>>140 Apache はデフォルトで / 無しのリクエストに対して 301 を返し / を補完させるようになっている。
不要。
すみません、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 パラメータ数は、可変にしたいのですが・・・
>>143 mod_rewriteじゃ難しいかもね。
>>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]
ちなみに、改行するなよ。
無保証でヨロ。
>>145 あんたいい奴だな。けど143の質問ちゃんと読んでないよ。
ある程度パラメータ数の上限を決めて、個数ごとに145みたいなRewriteRuleを
書くしかないと思う。
>>143
RewriteRule ^(([a-z]/[0-9]/?)*)\.html$ /index.php/$1 [L] とやってPHP側で $_SERVER['PATH_INFO'] を分解するくらいしか・・・
不定個数のパラメータ名をインクリメントしていくのを mod_rewrite の正規表現だけでやれと言われると確かに厳しい mod_perl で PerlTransHandler あたりをフックしてちゃちゃっと書き換えるなら割と楽にできる
>>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]
RewriteMap 使えば?
RewriteCond で OR な条件を指定する際に RewriteCond %{HTTP_HOST} ^(apple|grape|orange)\.example\.com$ とするのと RewriteCond %{HTTP_HOST} ^apple\.example\.com$ [OR] RewriteCond %{HTTP_HOST} ^grape\.example\.com$ [OR] RewriteCond %{HTTP_HOST} ^orange\.example\.com$ とする場合で、一般論としてどちらが高速でしょうか?
>>152 正規表現を1回評価するのと3回評価するのとでは明らかに1回の方が早いので前者
RewriteRule ^(.*)$ /tmp/hoge.cgi [L] としたときに、robots.txtなどのいくつかのファイルはスキップさせたいのですが どのようにすれば良いのでしょうか?
.htaccessスレから移動してきました。 質問があります。 URLエンコードを行って日本語等が%XYの形式になったURLを含んでいるとき、 RewriteRule ^([0-9A-Za-z%]+)$ test.php?keyword=$1 などとしても404エラーになってしまいます。(日本語がないときは通常通りです。) ルールの記述が間違っているのでしょうか。 エラーにならない方法をご存知でしょうか。お願いします。
>154 まずマニュアルを読んで、それから細かいところを質問する姿勢を見せる。
157 :
nobodyさん :2006/01/15(日) 15:53:40 ID:0othuuG9
XREAでは RewriteRule ^(.*)\.html$ test.cgi?$1 でうまくいったのに、自分のサーバーでは漢字とひらがながリライトできない。 記述の問題じゃないかも。
文字コードでしょ
159 :
157 :2006/01/16(月) 01:32:31 ID:???
かも まあ、Apache1.3から2にしたら、何の問題もなくリライトするようになったのでよしとする
ログ見るのがはやいんじゃ?
mod_rewriteとpath_infoってどっちの方がいいのかな?
163 :
nobodyさん :2006/03/08(水) 21:55:04 ID:F0LiHM5T
RewriteEngine on RewriteBase /hogehoge RewriteRule ^hoge/([^/]+)/$ ho.php?user=$1 [L] とした場合、/hoge/username/?page=2 といった感じで引数userのほかに引数pageを読み込ませるにはどうしたらいいのでしょうか?
>>163 RewriteRule ^hoge/([^/]+)/$ ho.php?user=$1&%{QUERY_STRING} [L]
165 :
nobodyさん :2006/03/10(金) 01:49:51 ID:wS29C68G
エロ屋やアマゾンとかで /-/detail/=/ とかいうURLがあるけどあれもmod_rewrite? ハイフンとかなんか意味あるのかな
RewriteEngine on RewriteRule ^/dir/hoge/([0-9]+).html$ /dir/hoge.php?id=$1 として/dir/hoge/nn.htmlのアクセスを/dir/hoge.php?id=nnに rewriteし、/dir/hoge.phpは動作するのですがQUERY_STRINGのid=nnが hoge.phpに渡りません。なにかRewriteRuleの書き方におかしな点が ありますでしょうか?
↑申し遅れました。CentOS3.4+Apache1.3.33、ちなみにphp4.4.2です
>>166 もちろん実際のnnは数字でここではサンプルとしてnnと書いたんだよね
そうです。nnは数字です。 ちなみにhoge.phpで参照できる'REQUEST_URI'は ブラウザ送信された/dir/hoge/nn.htmlがそのまま来ますので hoge.php側で何とかできそうですが、 腑に落ちないのとhoge.phpを変更したくないので 設定に落度があるのならそれで解決したいと考えています。 よろしくお願いします。
166です。 よくわからなくなってきました。 RewriteEngineとRewriteRuleをコメントにしても /dir/hoge/nn.htmlでhoge.phpが呼び出されます。 別の次元でRewriteRuleが効いているようですが 心当たりなしでパニック中。
173 :
nobodyさん :2006/03/25(土) 15:58:49 ID:rUjENMuu
パラメーターに&が入ったときのmod_rewriteについて質問です・・
問題をvar_dumpを使って入ってきたパラメーターだけを表示するプログラムtest.phpにまとめてみました。
あと私のところで使ってる文字コードはUTF-8
<?
var_dump($_SERVER["QUERY_STRING"]);
echo "<br>\n";
var_dump($_GET);
$param = urlencode("coffee&tea");
$directUrl = "
http://hoge.go.jp/test.php?keyword= ". $param;
$rewriteUrl = "
http://hoge.go.jp/ ". $param. "/";
echo "<br>\n";
echo "case 1 <a href=\"". $directUrl ."\">direct_url</a><br>\n";
echo "case 2 <a href=\"". $rewriteUrl ."\">rewrite_url</a><br>\n";
?>
で、.htaccessはこんな感じ
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^/(.*)/$
RewriteRule ^(.*)/$ /test.php?keyword=$1 [L]
case1のdirect_urlの場合
http://hogehoge.go.jp/test.php?keyword=coffee%26teaを生成 。
そのURL(自分自身なわけだけど)に飛ぶと以下の文字列を吐き出す
string(20) "keyword=coffee%26tea"
array(1) { ["keyword"]=> string(10) "coffee&tea" }
これはOK。これにrewriteを噛ましたい。
問題のcase 2、rewrite_urlの場合
http://hoge.go.jp/coffee%26tea/を生成 。
飛ぶとmod_rewrite補足され、変換される。以下ログから抜粋
(3) [per-dir /var/www/hoge.go.jp/] applying pattern '^(.*)/$' to uri 'coffee&tea/'
(4) RewriteCond: input='/coffee&tea/' pattern='^/(.*)/$' => matched
(2) [per-dir /var/www/hoge.go.jp/] rewrite coffee&tea/ -> /test.php?keyword=coffee&tea
(3) split uri=/test.php?keyword=coffee&tea -> uri=/test.php, args=keyword=coffee&tea
そのURLに飛ぶと以下の文字列を吐き出す
string(18) "keyword=coffee&tea"
array(2) { ["keyword"]=> string(6) "coffee" ["tea"]=> string(0) "" }
%26がmod_rewriteで&にデコードされちゃってteaが引数名になっちゃうよ・・・
対策法ご存知の方教えてください・・・あるいはどこか設定が悪いのか・・・
>>176 あー、なるほど、mod_rewriteにはurlencodeを2重に仕込むのね。
mod_rewriteを延々と弄っててきがつかんかった。
確認取ったところ上手く動きました。
この方法でやってみます。サンクス。
しかしmod_rewrite側での対応は設定はやはり難しいのかなぁ・・・
PHPに入ってくるエンコード状態と出て行くエンコード状態がrewrite使う使わずに関わらず
同じであれば見通しがいいかなーとか思ってたので。
178 :
nobodyさん :2006/04/22(土) 02:52:49 ID:IkBNOhRq
フラグのQSAは、マニュアルに >このフラッグは、置き換えるのではなく、存在するものに対して、 >rewrite エンジンが代用文字列にあるクエリー文字列にアペンドするようにします。 >rewite ルールでクエリー文字列にデータを追加したいときに使ってください。 とあるのですが、実挙動としてどのようになるのか、よくわかりません。 いったいどうなるのでしょうか?
>178 読んで字の如くそうなる。
いや、だからその、言葉の意味がわかにくいので・・・ 実挙動としてどうなるのか、サンプルなどがあるとわかりやすいんですけど、、
181 :
nobodyさん :2006/04/24(月) 11:05:56 ID:Z/7vX4oM
/hoge/modname/ReserveForm.do ↓ /hoge/modname/index.php?ReserveForm といった感じにrewriteしたいのですが、どうもうまくいきません。 RewriteRule !hoge/([^/]+/)ReserveForm\.do $1/index.php とやるだけで、internalエラー(無限ループ)になります。 modnameの部分を$1に置換するにはどうやればいいのでしょうか。
>>181 modnameを置換する必要はないようだけど例文の間違いですか
>>143 みたいなことしたいのですけど、やはり決定的な方法ってありませんかね。。。
>>150 に書いてありましたね。。。
すみません。。。
185 :
nobodyさん :2006/06/15(木) 09:05:30 ID:p9raRrGD
186 :
185 :2006/06/15(木) 09:07:01 ID:???
187 :
nobodyさん :2006/06/24(土) 20:11:15 ID:usPjod1h
>>189 R オプションでリダイレクトじゃまいか?
[R,L]
192 :
nobodyさん :2006/08/19(土) 09:19:31 ID:AnvEHxgI
鯖は逆引き設定にしてあります。 逆引きできない人を別アドレスへ飛ばしたいのですが 「REMOTE_HOSTが数字だけの時」という条件はどう書けばいいでしょうか? またproxy接続の人をmod_rewriteだけでなるべく効果的に(完全でなくてもいい) 別アドレスへ飛ばしたいのですがどの環境変数にRewriteCondをどう書けばいいでしょうか? 初心者ですがよろしくお願いします。
193 :
nobodyさん :2006/08/29(火) 18:50:13 ID:qBkjqVym
194 :
nobodyさん :2006/09/05(火) 21:59:51 ID:Hy3lSiWg
質問です。 使っているサーバーにて、サーバー管理人さんにmod_rewriteをONにしてもらったのですが、 きちんと動作することを確認するサンプルphpや.htaccessをご存知ないですか? サーバー管理人さんが忙しいようでなかなか連絡がつきません、 どうにか動作確認をしたいのですが。。。
>>194 動作確認の方法もわからずにそんなことをしてどうするつもりだ?
196 :
nobodyさん :2006/09/05(火) 23:53:40 ID:Hy3lSiWg
>>195 とあるCMSプラグインを説明書に従ってインストールします。
管理人も大変だな
>>197 そういわれると思ったよ。
標準的な他サーバー3つでプラグイン動いてるし、
プラグインの動作に必要なのはmod_rewriteのみだし。
CMSの動作は他にいれたサイトがずっと安定してるし。
こっちが大変だと思ってるけどもう実装は諦めた。
断る。
199 :
nobodyさん :2006/09/06(水) 22:30:09 ID:ogWsQap5
ねぇ。誰かmod_rewriteエミュレータつくらね? 入力文字列(URL)を入力したら htaccessにしたがって どうURL変換されるか表示されるの。 そうすれば大幅に敷居が下がると思うんだけど。
>>199 > mod_rewriteエミュレータ作ろうと思うんだけどどうよ?
> 入力文字列(URL)を入力したら
> htaccessにしたがって
> どうURL変換されるか表示されるの。
> そうすれば大幅に敷居が下がると思うんだけど。
すっげぇ期待してます。
勝手に変わってるw まあ便利だろうけどdebug onにすれば大体事足りるからね
202 :
nobodyさん :2006/10/21(土) 03:17:29 ID:KzoqADxq
mod_jk2でapacheとtomcatを連携しています。 mod_rewriteを使って、tomcat上で動くstrutsを用いたアプリの URLを書き換えようとしているのですが、うまくいきません。。 (URLがrewriteされる前に、tomcatのほうに制御がいってしまい、うまく書き換えられない) どこを設定すればよいでしょうか?
mod_rewriteエミュレータまだですか?
最近佐賀ネタでスレ違いの書き込みが増えている。 佐賀県庁・佐賀県警・談合・痴漢・情報漏洩などの内容だ。 銀行が潰れるとしたデマが回り騒ぎが起きたこともある。 このような書き込みは慎むべきだ。 被害防止のため常駐するスレに啓蒙してくれ。
205 :
nobodyさん :2006/12/14(木) 00:36:31 ID:HPgduaQo
坊やな質問させてもらうで酢 mod_rewriteのRewriteRuleでprofile.cgiからprofile.htmlへURLの書き換えをしようとしてるで酢 書いたルールが以下の通りで酢 RewriteRule ^(.*)\.cgi?(.*) $1.html?$2 [L] でも「profile.htmlなんてねぇよ」って狐火に言われるんで酢 mod_rewriteってURLだけの書き換えって出来ないんで酢か? 回答お願いしま酢
クライアント側を騙すことは出来ない
>>206 まじで酢か。
じゃあソース直接書き換えるしかないで酢ね。
ありがとうで酢
cgi と html が逆なだけだろw htmlにアクセスしたときcgiを実行するようにすればいいんだよ。
.htacc(略
すいません。 正規表現の質問なのですが、 mod_rewriteで、 "/media.*"以外へのリクエストをすべて"/index.php"へ飛ばすにはどうすれば良いでしょうか? 宜しくお願いします。
>>210 RewriteEngine on
RewriteCond %{REQUEST_URI} !^/media
RewriteRule (.*) /index.php [L]
!^/media の ^ はいらんかったかな…
213 :
212 :2007/03/06(火) 14:31:15 ID:???
自己解決しました。
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*)$
https://www.example.com$1 [R=301,L]
SSL環境の設定ファイルが違いました。。。orz
([0-9A-Za-z]+) の部分にアンダーバーを入れたいのですが、_を入れてもうまくいきません。 RewriteRule ^([0-9A-Za-z_]+)/$ /index.php?mod=user&act=$1 [L] 半角英数字の正規表現にアンダーバーを入れるにはどうすればいいでしょうか?
215 :
214 :2007/03/07(水) 01:09:00 ID:???
自己レス ただapacheを再起動していなかっただけぽ
216 :
nobodyさん :2007/03/10(土) 17:38:22 ID:VXyj5Dh3
217 :
nobodyさん :2007/05/25(金) 00:26:35 ID:4kvXKUJV
219 :
217 :2007/05/26(土) 06:46:54 ID:???
>>218 まじっすか。
apacheの設定に問題があるのかもしれません。
もうすこし調べてみます。ありがとうございました。
220 :
nobodyさん :2007/05/26(土) 13:58:00 ID: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/ となる。
221 :
nobodyさん :2007/05/26(土) 13:59:31 ID: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 を書けばよろしいでしょうか。
アドバイスをお願い致します。
RewriteRule ^/([\w_]+(/[\w_]+)*)$ $1/ [R] なんかこんな感じじゃだめかね? 適当
223 :
サレ :2007/06/21(木) 20:21:18 ID:yAR7j5RX
mod_rewriteを利用して特定のページアクセスの際にSERVER_NAMEとQUERY_STRING以降を除いて 大文字、小文字の区別なく表示させたいのですが、全くうまくいきません、いい案をお持ちの 方いたらご教示お願いしたいです。
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]
225 :
nobodyさん :2007/07/12(木) 15:02:09 ID:5UK7fMyc
RewriteEngine on
RewriteCond ${REQUEST_URI} !-d
RewriteRule ^(.*hoge)/([0-9]+)/$ $1?number=$2 [L]
これでURL変換はうまくいってるんですが、ブラウザのアドレス欄には変換後の
http:// 〜hoge/?number=10
というのが表示されてしまいます。
これを変換前のURLのままにしておくにはどうすれば良いのでしょうか?
>>266 ID。
aaaは定数? それともwwwとwww2だとか幾つかある?
質問です。よろしくお願いします。 RewriteRule /(.+)\.(.+)$ /$1.A.$2 既存の拡張子の前に.Aを挿入しようとしていますが、$2に前置するピリオドが 悪さしているらしく、うまく動きません。どうすればよいでしょうか。
229 :
228 :2007/07/19(木) 01:05:11 ID:k0bvHpUP
.を_などにすると意図したように動きます。といいつつあげます。
とりあえずピリオドの前には常に¥マークを付けるんだ
231 :
228 :2007/07/19(木) 02:11:07 ID:???
\つけてもだめでした。その前に、.$1は問題ないんですが、 .はそもそもエスケープする必要あるのが普通でしょうか。 .Aの挿入はおいといて、$1.$2もだめでしたが、$2.$1は大丈夫でした。 何か他の理由でしょうか。 とりあえず、$2にピリオドごと格納して解決しました。 が、なぜ上記のがだめなのか気になって夜も眠れません。
232 :
228 :2007/07/19(木) 23:31:43 ID:???
全然、別の問題のようでした。何かがループされてしまってたようです。 Rewriteの動きをよく理解できてないようですので勉強します。
234 :
nobodyさん :2007/08/12(日) 03:59:41 ID:YzqJNCOc
age
>>226 なんでそんなことするんだよwwwと思ったけどなるほど お前頭いいな
ちょっと考えてみるわ
>>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"
237 :
nobodyさん :2007/08/13(月) 01:26:53 ID: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
・
・
・
.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
.htaccessはRewriteBaseが必須。
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] これじゃまずいんだっけ。
241 :
nobodyさん :2007/08/13(月) 11:17:43 ID:d8YeW0fj
問題なさそうだけど。。。
RewriteBaseにセットする値はURL-path。
>>242 たしかにマニュアルみたらそう書いてありました。
が、RewriteBase / でも結果は変わらず。
244 :
nobodyさん :2007/08/14(火) 01:45:16 ID:sYc3cRby
変換ログが怪しすぎるし、バグなのかなぁ。
245 :
nobodyさん :2007/08/23(木) 14:25:41 ID:oRh+in4w
246 :
nobodyさん :2007/08/25(土) 21:04:57 ID:mIpqfkg/
RewriteRule でどのパターンにも一致しない場合のルールでどうやればよいでしょうか?
YomisearchCGI版のカテゴリを静的化したいのですが、 参考になるページご存じの方教えて下さい yomi.cgi?page=1&mode=kt&sort=ac_new&kt=01_03 ↓ /p1/kt/ac_new/01_03.html こんな感じにしたいです (もしくはもっと短く)
248 :
nobodyさん :2007/08/26(日) 11:52:46 ID:6oSQJEbU
>>247 このスレみるだけでじゅうぶんでは。
どこを難しいと感じているのかわからないし。
すみません質問させてください 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
RewriteEngine On RewriteRule .* index.php まずこうしてmod_rewrite、文法どちらに問題があるのか切り分けてみなよ。 文法が間違ってるなら RewriteLog /var/log/httpd/rewrite_log RewriteLogLevel 9 としてログを見ながら原因を探る RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f でいけるかもしれない。
>>250 やってみたんですがあいかわらず404です…
文法間違いじゃなくてやっぱApacheの設定ミス…?
インストールしなおした方がいいんでしょうか。
.htaccessで使うときはRewriteBaseが必須。
う〜ん、 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の再起動はしなくていいんですよね?
>>254 >mod_rewriteって"?"以降を無視してしまうのでしょうか?
正解
>だったら、googleは"search?***"をどう実現してるのでしょうか?
searchがスクリプトファイル名
ファイルに絶対拡張子が必要なわけではない
256 :
254 :2007/10/25(木) 15:16:18 ID:???
まあrewriteはなんでも出来るから RewriteRule ^([0-9A-Za-z)]+)\?(..*)$ /index.php?mode=$1&$2 は RewriteRule ^([0-9A-Za-z)]+)$ /index.php?mode=$1&%{QUERY_STRING} で出来るかも
257 :
254 :2007/10/25(木) 17:38:26 ID:???
>>255 ,256
[QSA]を付ける事で問題を解決できました。素早い回答ありがとうございます。お騒がせしました。
258 :
nobodyさん :2007/10/27(土) 00:37:29 ID:zm9qnQ5v
女性にmod_rewriteの説明をする時って最高にセクハラできるよね('-'*) 「このように性器表現で痴漢すれば、性的なURLでアクセスできるようになります」
ほう。
260 :
nobodyさん :2007/10/27(土) 18:02:43 ID:PPo48ltM
ほうほう
> 性的なURLでセクロス ( ´ω`) … (⊃⊂) (´ω`;)⊃ アウアウ!! ⊂ミ⊃ ) / ヽ
262 :
nobodyさん :2007/11/14(水) 12:06:40 ID:ng0LolU1
/ があると index.html の自動補完が先に動くのではないかと。 /index.html まで書いたり、 ファイルが無いことを条件にもっとゆるいrule を作ってみてはどうでしょう? RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule * /ctgr_search.php?cid=$1
%2f問題。
265 :
nobodyさん :2007/11/29(木) 11:22:36 ID:oBkh+T4G
すみません、質問させてください。 /から始まる絶対パスで開発を進めていたのですが、一時的にサブフォルダ内で 動作させる必要が出てきました。 /img/top/title.gif" のように記述しているリンクをRewriteを使い、 /hoge/img/top/title.gif" と変更することってできますか? ご存知の方、教えて頂けると助かります。
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]
それだとある程度自由にローカルのファイルにアクセス出来るから Request_URIで判別した方がいいよ
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]
こんなかんじでいけるのですが。
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 に分離できるかと思ったのですが。
RewriteRule ^/(.+)/(.*) /$1/index.php?i=$2 ってやったら /aa/bb/ は /aa/index.php?i=bb になったけど /aa/bb/cc は /aa/index.php?i=bb/cc 変わらなかったんだけど/はだめなの?
272 :
nobodyさん :2008/01/23(水) 22:17:35 ID:iTWduqjM
ねがいない
RewriteEngine on RewriteRule ^([A-Za-z0-9-/]+)/?$ /test/$1 [L] ってやってるんですけど、元から実在するURIが渡されるとrewriteされません。 例えば、hogeへリクエストがあると/test/hogeにrewriteされるんですが、 testへリクエストがあるとtestのままで/test/testとなってくれません。 このようにするにはどうすればいいんでしょうか。
レンタル鯖屋も大変だな…
>>271 最長一致、つまりこの場合左に現れる .+ ができるだけ長くマッチしようとする。
その結果、
$1 => aa/bb
$2 => cc
となる。
RewriteRule ^/(.+?)/(.*)$ /$1/index.php?i=$2
として最短一致にすれば期待の結果になる。
あるいは、$1 に / が含まれない仕様であれば、
RewriteRule ^/([^/]+/(.*)$ /$1/index.php?i=$2
と書けばいい。
277 :
sage :2008/02/06(水) 13:09:37 ID: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
↑いまさらダサすぎる失敗はスルーしてください><
自己解決。QSA便利ですね
280 :
nobodyさん :2008/02/07(木) 20:08:01 ID:L14jE359
fedora8にyumでhttpdをインスコしましたが、mod_rewrite.soが含まれていませんでした これだけでは足りないと思い、httpd-develもインスコしましたがやはり見つかりません yumのlistにもmod_rewriteのパッケージが見つからないのです httpd自体をmakeしなおさないとリンクしないような気がしてならないのですが、これはwgetでmod_rewrite単体を modulesの下に置くだけでよいのでしょうか? よろしくお願いします
282 :
280 :2008/02/09(土) 02:06:41 ID:???
>>281 confファイルのある/etc/httpd/modules/の下を探していたのですが、ご指摘の場所にmod_rewrite.soが入っていました
まだfedoraのディレクトリ階層に不慣れなものでお恥ずかしいです
httpd -lも確認したところ、mod_so.cがリストされましたのでDSO対応のようです
どうもありがとうございました
285 :
nobodyさん :2008/02/29(金) 22:12:08 ID:a2f9rZSr
age
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は環境変数で受け取る予定です
助けてください
287 :
age :2008/04/26(土) 13:59:43 ID:???
age
age
289 :
nobodyさん :2008/07/08(火) 18:33:15 ID:svqzHQk4
特定のURLにアクセスがあったときにだけログを出力して リダイレクトさせたいのですが、こういった細かい事は スクリプトサイドでやらせるのが正しいのでしょうか?
サーバサイドじゃね
291 :
nobodyさん :2008/07/08(火) 19:09:36 ID:svqzHQk4
>>290 ありがとう
やっぱりそうですよねorz
292 :
nobodyさん :2008/07/16(水) 14:57:36 ID:XAZRRasQ
REQUEST_FILENAME がとれずに 本来 /var/www/test となるものが、 /test だけになってしまいます。 考えられる原因は何でしょうか?
RewriteRule ^\*/(.*)$
http://$1 [P]
mod_rewriteとmod_proxyが必要
295 :
nobodyさん :2008/08/30(土) 01:18:08 ID: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がついたログが記載されますか?
/dir/index$ /dir/index.php じゃないかな
297 :
nobodyさん :2008/08/30(土) 01:54:50 ID:KZbGqcdu
ありがとう。やってみる
298 :
nobodyさん :2008/08/30(土) 02:00:47 ID:KZbGqcdu
>296
だみでしたorz
普通に拡張子が付いていない方のリクエストのようです
http:// ○○○.com/dir/index?id=hoge
/dir/index(\?.*) /dir/index.php$1 これでどうかな
300 :
nobodyさん :2008/08/30(土) 02:13:02 ID:KZbGqcdu
教えてもらってありがとうございます。 しかしだめみたいです。
RewriteRule ^/dir/index$ /dir/index.php [QSA] じゃないか?
補足 RewriteBaseも書いとけ
303 :
nobodyさん :2008/09/20(土) 23:45:28 ID:28hSW6Aw
www.example.comにアクセスがあったら www.example.com/hogeに転送するように設定したいんだけど うまくいきません。 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^/ /hoge </IfModule> これだとだめなようす。 どのように設定すればいいのでしょうか?
[R]
サンクスです。 解決しました
307 :
nobodyさん :2008/10/10(金) 22:36:02 ID:Px0vbjZd
教えてgooとのマルチポストになってしまいますが、ご容赦下さい。 mod_rewriteで$_GETが受け取れない現象の原因が分からず、困っています。 公開サーバはVineLinux3.2でApache2を動かしています。 ドキュメントルートに以下の内容の.htaccessを配置しています。 RewriteEngine on RewriteRule ^index/([a-z0-9A-Z_]*)?$ index.php?action=$1 RewriteRule ^index/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)/([a-z0-9A-Z_]+)$ index.php?action=$1&type=$2&value=$3 ところが、 index/hogehogeにアクセスしても、 index.phpの結果しか返ってきません。 index.phpでvar_dump($_GET);を実行した結果は、 array(0) {}となります。 WindowXP + XAMPP1.6.6a で構築したローカル環境では期待通り、 index/hogehogeにアクセスすることでindex.php?action=hogehogeの結果が返ってきます。 エラーログも確認しましたが、エラーも出ていません。 少なくとも、index/hogehogeにアクセスしてindex.phpの結果が返ってくるということは、 .htaccessに書かれたRewriteRuleが全く反映されてないわけではないのだと思うのですが…。 どこに原因があるのか全く分からず、困っております。 宜しくお願いします。
はぁ?マルチ死ね
>>307 rewriterule にパラメーターを含めない
スレチっぽいけど質問 mod_rewrite で301返し続けているのに、 Feedfetcher-Googleがずっと元のrssを取りに来るんですが、 向こうさんのDBが書き換えられるのってそんなに時間がかかるもんなの? まだ一週間ちょっとしかたってないんだけど、もうちょっとまったら 書き換えられるのかな
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のパスはどこを基準に考えたらいいんでしょうか?
ループしているというログはどこで確認したんでしょうか? その時のエラーメッセージは? rewrite.logのパスはServer Rootから相対だけど、とりあえず フルパスで書いちゃえば?
ログ書き出す前にRewriteEngine on は要らないの?
315 :
312 :2008/11/21(金) 11:20:51 ID:/EsDW5qx
>>313 素早い回答ありがとうございます。
ループについては、ブラウザにそういうメッセージが出るんです。
Firefox
「自動転送がループしています
このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」
Chrome
「このウェブページにはリダイレクト ループが含まれています。」
パスについては現在以下のようになってます。
C:\Program Files\Apache Group\Apache2\logs\rewrite.log
問題ないですよね?
ループしてるってのが勘違いでそもそも動いてないんだろうか?
mod_rewriteが動作してるかどうか、チェックする方法ないでしょうか?
自分としてはログを見ることでそれを確認しようと思ってたんですが、、
.htaccessを書き換えたら出来るのかな
どうしたらいいでしょうか?
316 :
312 :2008/11/21(金) 11:24:54 ID:/EsDW5qx
>>314 .htaccessに書いてるのではダメということですか?
httpd.confには312で書いただけしか記述してませんがアレでは不足でしょうか?
いろんなサイトを見てその通りにしたつもりですが。。
ブラウザにそのように表示されるなら、ループしてるのは、
アプリでリダイレクトしてるからでしょう。
rewriteでループしたらhttpdのログに普通に出るはず。
>>314 氏が言ってるのは、httpd.confが先によまれるけど、
そのときに、rewrite エンジンがonじゃなかったらディレクティブが
無視されるのでは?って話かと。
318 :
312 :2008/11/21(金) 13:31:49 ID:/EsDW5qx
>>317 mod_rewriteのエラーであれば、error.logに出力されるということですか?
そういえば、error.logにはそういう記述がありません。
>
>>314 氏が言ってるのは、httpd.confが先によまれるけど、
>そのときに、rewrite エンジンがonじゃなかったらディレクティブが
>無視されるのでは?って話かと。
.htaccessに書いてある RewriteEngine on では不十分ということでしょうか?
どこに記述したらいいんでしょう?
自分なりに勉強してるつもりなんですが、、知識不足で本当に済みません
httpd.confでRewriteLogの行の上に書いてみたら? んで、RewriteLogはフルパスで。 で、php側はphpinfoでも出力するようにしてリクエストを確認してみたらどう?
320 :
312 :2008/11/22(土) 06:29:56 ID:BXxABI2c
>>319 ありがとうございます、でもうまくいきませんでした
なぜかrewrite.logへのパスを指定するとapacheが動かなくなってしまいました。
そこで、根本的に基礎からやり直そうとして、httpd.confに
RewriteEngine on
RewriteRule ^/(.*)$ /index2.php$1 [R=301,L] と書いて、
localhost/test.gifにアクセスしたところ「自動転送がループしています」とブラウザに
言われてしまいました。※.htaccessは使ってません。
(ブラウザのURL欄の表記は
http://localhost/index2.phpindex2.phpindex2.phpindex2.phpindex2.php (中略)index2.phpindex2.phpsample.gif になってました)
index2.phpのソースは <?php echo "rewrite成功"; ?> だけです。
何が原因なんでしょうか? さっぱりわからないです。
ちなみに、RewriteRule ^/(.*)$ /system/index.html$1 [R=301,L] と書いても
http://localhost/system/index.htmlsystem/index.html (中略)system/index.htmlsystem/index.htmltest.gifになります。
ブラウザのクッキーの消去などもしてみたんですが、、何度も申し訳ないですが
気が向いた方よろしくお願いします。
> RewriteRule ^/(.*)$ /index2.php$1 [R=301,L] そりゃ、ループするわ。 > RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php こっちじゃなかったの?
> RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php これもループしそうだな 書き換えたindex.phpは永久に!\.(js|ico|gif|jpg|png|css)$の条件に当てはまるだろうし
ログへのパスを指定したら動かなくなったら、messagesかなんかに、ログが出るでしょ。 ログファイルがないとか権限がないとか。 RewriteRule ^/hoge(.*)$ /index2.php$1 [R=301,L] で、/hoge/hogeにアクセスしてみ?
>>322 それはループしないよ。
R=301だとブラウザにリダイレクトして再リクエストさせるけど、
> RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
この場合、index.phpがすべてのリクエストを受けとって処理開始
325 :
nobodyさん :2008/11/22(土) 07:36:48 ID:BXxABI2c
みなさんありがとうございます、順にためしてみますね。 ログファイルの設定でapacheが再スタートできなくなると書きましたが、 ちょっと前までは設定しても動かせてたんです、それが突然だめになりました
326 :
nobodyさん :2008/11/22(土) 07:44:24 ID:BXxABI2c
>> RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
>こっちじゃなかったの?
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.phpに設定して
http://localhost/favicon.ico にアクセスしたら、ちゃんとfavicon.icoを表示しました が、
http://localhost/index2.php にアクセスしたら BadRequestといわれました
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php って index.phpに転送するって意味でよかったでしょうか?
>RewriteRule ^/hoge(.*)$ /index2.php$1 [R=301,L]
>で、/hoge/hogeにアクセスしてみ?
をためしたところ
http://localhost/index2.php/hoge になりました。これで正しいんでしょうか?
釣り?
index.phpになんか書いてあるんじゃないの?
> RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php って index.phpに転送するって意味でよかったでしょうか?
その通り
>
http://localhost/index2.php/hoge になりました。これで正しいんでしょうか?
正しいでしょう。
RewriteBase / って書いてる? そのとき、ちゃんとindex.phpは/index.phpに置いてあるの? サーバー上のパスだよ。
329 :
nobodyさん :2008/11/22(土) 09:26:49 ID:BXxABI2c
>>327 index.php には echo "index.php"; と書いてあるだけです。
うーんダメだ RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php としたら
index2.phpへのアクセス→Bad Request
index.phpへのアクセス→Bad Request
/sample/index.htmlへのアクセス(普通の静的ファイル)→Bad Request
favicon.icoへのアクセス→ちゃんと表示
となります
>>328 今は httpd.confでmod_rewriteしようとしてるんですが RewriteBase / って使えるんですか?
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
としてみたところ、apacheの再起動が出来なくなりました。 上2行を入れ替えてみてもダメです
アドバイスたくさんくれてるのに済みません。
RewriteBaseは、あなたが、index.phpを置いてあるところを指すように書く たとえば、/var/www/html直下なら RewriteBase /var/www/html/ もし、httpd.confでserverRootがちゃんと指定してあるなら そこからの相対でもいいはず。 RewriteBaseが使えないようなら、 RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php このとき、index.phpをフルパスで書く/var/www/html/index.phpとかね
331 :
nobodyさん :2008/11/22(土) 09:55:07 ID:BXxABI2c
>>330 本当にありがとうございます
httpd.confをみると
ServerRoot "C:/Program Files/Apache Group/Apache2"となっています
index.php は Apache2/htdocs/index.php だから
RewriteEngine on
RewriteBase /htdocs/
としてみたんですがapacheが再起動できませんでした。なので、RewriteBaseはやめて
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /htdocs/index.php とした上で
index2.phpにアクセス→NotFound ※本当はあります<?php echo"index2だよ";?> と書いてあります
favicon.icoにアクセス→そのままfavicon.icoを表示
となりました
ダメですよね? ほんらいならどっちもindex.phpに転送されてるはずなんですよね。。
ServerRootがそれだったら RewriteBase htdocs/ だな。 もしくは RewriteBase "C:/Program Files/Apache Group/Apache2/htdocs/" で、RewriteBaseを指定したら起動できなくなるんならログを確認してさ。 そんでだめなら RewriteRule !\.(js|ico|gif|jpg|png|css)$ "C:/Program Files/Apache Group/Apache2/htdocs/index.php"
333 :
nobodyさん :2008/11/22(土) 10:09:39 ID:BXxABI2c
>>332 RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ htdocs/index.php
に変更してみました!
でも以下のようになりました
index2.phpにアクセス→BadRequest
favicon.icoにアクセス→そのままfavicon.icoを表示
これじゃダメなわけですよねー
mod_rewriteに関連する記述は上に書いただけなんですが(.htaccessもないし)
なんでなんだろう
フルパスは試した? DocumentRootはどうなってる?
335 :
nobodyさん :2008/11/22(土) 10:25:34 ID:BXxABI2c
>>334 おおお!
RewriteRule !\.(js|ico|gif|jpg|png|css)$ "C:/Program Files/Apache Group/Apache2/htdocs/index.php"
を試したところ、index.phpの内容が表示されました → echo "index.phpです";
(URL的には localhost/index2.php のままなんですがこれでいいんでしょうか?)
しかし、/localhost/favicon.ico にアクセスするとそのままfaviconが表示されます index.phpに移動するんじゃないんでしょうか?
ドキュメントルートは
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs" となっています
これは何に関連するんでしょうか?
336 :
nobodyさん :2008/11/22(土) 10:27:38 ID:BXxABI2c
何をしたいのかわからんので、あとは、自分でドキュメント見て考えてみた方が・・・ URLも変えたいならRオプションでリダイレクトだけど、ループしないように注意。 system以下をrewriteから外したいなら、rewriteCondで除外設定を書く
あぁ、ちなみに俺が書いたrewriteBaseの記述はデマだったので無視してちょ
339 :
nobodyさん :2008/11/22(土) 10:55:16 ID:BXxABI2c
ありがとうございました! ほんとに助かりました!
340 :
nobodyさん :2008/12/14(日) 10:48:10 ID:+j0Og9H5
スミマセン、聞かせてください mod_rewriteの除外処理が上手くいかないです RewriteEngine on #除外処理# RewriteCond %{REQUEST_URI} !^/admin RewriteCond %{REQUEST_URI} !^/phpmyadmin #RewriteBase /htdocs/ RewriteRule !\.(js|ico|gif|jpg|png|css)$ "C:/Program Files/Apache Group/Apache2/htdocs/index.php" RewriteLog "C:/Program Files/Apache Group/Apache2/logs/rewrite.log" RewriteLogLevel 9 これじゃ駄目なんでしょうか? adminとphpmyadminを除外したいんですが よろしくお願いします
341 :
340 :2008/12/15(月) 16:53:40 ID:???
自己解決しました
342 :
nobodyさん :2008/12/22(月) 21:50:17 ID:i6VX5Oho
hoge(日付).jpgとアクセスされたら(日付).jpgを表示したいんです
RewriteEngine on
RewriteRule hoge(.*)\.jpg$
http://example.com/$1.jpg [R]
うまく動作しません。どこが間違っているのでしょうか?
うちではちゃんと飛ぶけどなぁ
344 :
342 :2008/12/22(月) 22:12:02 ID:???
ググると「さくらインターネットの.htaccess の RewriteRule の正規表現に互換性がない」 という記事を見つけました。このせいかもしれません もう少し調べてみます、ありがとうございました
鯖によっても違うのかねぇ。 500 円の鯖で、その2行だけ書いてうまくいったお。
Apache 1.3.x と Apache 2.x でmod_rewriteが違うのかな? PCRE絡み?
mod_rewriteってドキュメントがやたらと説明不足でみんな嵌まるよな。 やることはプログラミング以下の設定ファイルなのに異常な分かり難さ。
ドキュメントに書かれた条件をすべて飲み込んでいれば問題ない。 何を何へ書き換えたいのかを用意された条件を使って組み立てる能力の問題。
349 :
nobodyさん :2008/12/27(土) 12:25:14 ID:CKOvxwPj
>>349 /
の正規表現での役割を考えればすぐわかる
mod_rewriteが機能しません。
環境
OS:CentOS5
http:apache2 httpd.confには以下の記述をしてapacheの再起動をしました。
LoadModule rewrite_module modules/mod_rewrite.so
RewriteLogLevel 9
RewriteLog /var/log/httpd/rewrite.log
で、/testディレクトリに以下の記述をした.htaccessファイルを設置。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/test/(.*)$ /test2/$1 [L,R]
</IfModule>
この記述をすると本来なら、「
http://ドメイン/test/index.html 」にアクセスしたときに「
http://ドメイン/test2/index.html 」にリダイレクトするはずだと思うのですが・・・。
ブラウザには「
http://ドメイン/test/index.html 」が表示されてします。
rewrite.logを見るとこんな風になってます。
192.168.1.6 - - [20/Jan/2009:17:41:36 +0900] [ドメイン/sid#96db468][rid#9895400/initial] (3) [perdir /home/httpd/html/test/] strip per-dir prefix: /home/httpd/html/test/index.html -> index.html
192.168.1.6 - - [20/Jan/2009:17:41:36 +0900] [ドメイン/sid#96db468][rid#9895400/initial] (3) [perdir /home/httpd/html/test/] applying pattern '^/test/(.*)$' to uri 'index.html'
192.168.1.6 - - [20/Jan/2009:17:41:36 +0900] [ドメイン/sid#96db468][rid#9895400/initial] (1) [perdir /home/httpd/html/test/] pass through /home/httpd/html/test/index.html
なにか設定漏れがあるのでしょうか。
分かる方いましたらご教示のほうよろしくお願いします。
352 :
351 :2009/01/21(水) 01:04:18 ID:Xd3Vqa6l
351です。 すいません、上げさせてください。
ログに書いてある通りだよね。 strip per-dir prefix: /home/httpd/html/test/index.html -> index.html RewriteBaseで、どこがURLのベースなのかを教えてあげたらどうかな。
.htaccessより上の階層のファイルを参照させたいのですが可能でしょうか? RewriteEngine on RewriteRule (.+?)\.php$ ../test/$1.php [L]
やってみたの?
356 :
351 :2009/01/23(金) 03:43:10 ID:???
>>353 ご教示ありがとうございます。
アドバイスを参考に以下の記述をhtaccessにすることによって思い通りの動作がすることを確認できました。
RewriteBase /test
RewriteEngine On
RewriteRule (.*)$ /test2/$1 [L,R]
そのときのlogは以下でした。
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (3) [perdir /home/httpd/html/test/] strip per-dir prefix: /home/httpd/html/test/index.html -> index.html
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (3) [perdir /home/httpd/html/test/] applying pattern '(.*)$' to uri 'index.html'
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (2) [perdir /home/httpd/html/test/] rewrite 'index.html' -> '/test2/index.html'
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (2) [perdir /home/httpd/html/test/] explicitly forcing redirect with
http://ドメイン/test2/index.html 192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (2) [perdir /home/httpd/html/test/] trying to replace prefix /home/httpd/html/test/ with /test
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (1) [perdir /home/httpd/html/test/] escaping
http://ドメイン/test2/index.html for redirect
192.168.0.6 - - [23/Jan/2009:03:37:44 +0900] [ドメイン/sid#856ce38][rid#872f830/initial] (1) [perdir /home/httpd/html/test/] redirect to
http://ドメイン/test2/index.html [REDIRECT/302]
353さん助かりました。
本当にありがとうございました。
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のように振舞わせる方法をご存知でしたら
ご教授よろしくお願いします。。
htmlの中にかかれたCSSファイルなどはすべて絶対パスになってます?
359 :
357 :2009/01/27(火) 16:06:45 ID:???
はい、なっています。 Apacheのerror_logを見ると、 file does not exist: /DocRoot/css file does not exist: /DocRoot/images というエラーログが吐き出されてます。 今回アクセスしてほしいのは /DocRoot/subDir1/css /DocRoot/subDir1/images なので、RewriteRuleが効いていないのかな、といった状態です。
/DocRoot/.htaccess 該当部分見せてください
361 :
357 :2009/01/28(水) 12:47:01 ID:???
/DocRoot/.htaccessは
RewriteBase /
のみです。
こまごまと指定しているRewriteRuleは
/DocRoot/subDir1/.htaccess になります
Options +FollowSymLinks
RewriteEngine On
RewriteBase /subDir1
RewriteCond %{HTTP_REFERER}
http://hogehoge.com/subDir1/ (.*)$
RewriteRule (.*) /subDir1/$1 [R,L]
RewriteRule ^$ /subDir1/foo.html [R,L]
RewriteRule ^foo\.html$ /subDir1/bar.php?str=hoge [L]
こんな感じです。
DocRootへのアクセスをどうにかしたいんですよね? /DocRoot/css -> /DocRoot/subDir1/css なら、DocRootの .htaccess に書かないと /subDir1/xxx -> /subDir1/bar.php?str=xxx のときの bar.phpのcssファイルへのリンクが /css だとしたら、 /.htaccess にその振り分けを。 そのときに subDir1 なのか subDir2 なのかを振り分けなくてはいけないですが URLにsubDir1が含まれていそうなので なんとかなるかな。
mod_rewriteじゃなくて、Aliasで十分なんじゃないの?
365 :
357 :2009/01/29(木) 14:23:59 ID:???
Aliasを試しましたところ、
>>363 の現象は回避できましたが
複数のサブディレクトリ毎にAliasを設定できないので断念しました。。
結局htmlにbaseタグをつけ全て相対パス表記にして、
jsのほうはdocument.baseURI要素を見てリクエストURIに追加する方法をとることにしました。
いろいろ勉強になりました。ありがとうございます。
366 :
nobodyさん :2009/02/01(日) 21:14:36 ID:xTHPhmiR
public_html/index.phpにアクセスされたらindex_new.phpに移動させたいのですが うまく動きません どなたかご教授お願いいたします RewriteEngine on RewriteRule .index.php$ /index_new.php [R=301,L] RewriteEngine off
/.index.phpへのアクセスで動いてる?
368 :
nobodyさん :2009/03/02(月) 05:54:17 ID:Xc+NjhEh
hoge.php?param=123 ↓ /hage/param/123 とやりたいんですが、 RewriteRule ^hoge\.php\?param=(.*)$ ./hage/param/$1 [R] ↓ hoge.php?param=123 (そのまま何も起こらず) となってしまいます。 後ろの方から少しずつ削っていくと、ここまで削った所で以下のように動きます。 RewriteRule ^hoge\.php(.*)$ ./hage/param/$1 [R] ↓ /hage/param/?param=123 多分、?のエスケープがうまくいってないようなんですが、どうしたもんでしょうか。
普通逆じゃないか?
370 :
nobodyさん :2009/03/02(月) 07:05:46 ID:Xc+NjhEh
事情があって、もとがベタベタPHPだったんだけど 今回FWかまして作り直すことになって、 でもSEOとかブックマーク入れてる人とかを考慮するために、 URLは元と同じじゃないと駄目だからってことになって、 やむにやまれずこんな方法でやるしかないかなと。 FWのコントローラ側をいじってもなんとかできることはできるんだけど、 今後のセキュリティアップデート考えるとFW自体はいじりたくないので。
色々やってはみたもののどうも無理そうなのでFWのルータいじります rewriteって特殊文字のエスケープ周り甘いのかなぁ
RewriteCond %{QUERY_STRING} ^param=(.*)$ RewriteRule ^hoge\.php$ ./hage/param/%1? [R] 試して無いが
374 :
nobodyさん :2009/04/03(金) 13:14:38 ID:nlrPhi8T
http://hogehoge.ero/index.php/eroero.htm => 404error!
http://hogehoge.ero/eroero.htm => OK!
となるんですが、/index.php/ を消す方法はないでしょうか?
今はこんな感じになってます
RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional - see notes##
RewriteCond %{REQUEST_URI} (/|\.htm|\.php|\.html|/[^.]*)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php
375 :
nobodyさん :2009/06/07(日) 03:20:19 ID:RWqPrWpc
>>373 Condで/admin/だけ避けるとか。
>>374 /index.php(/.*) → $1 みたいなRuleでも作るとか。
>>375 /list/の.htaccessに書いてるならBaseとして/list/をセットするか/list/込みでRuleを書くとか。
images/やjs/を避けるようなCondを書くとか。
板違いならすいません。。 www.example.com/^hoge/ (実態:/home/hoge/public_html/) 配下へのアクセスを www.example.com/^hoge/index.php (実態:/home/hoge/public_html/index.php) へとrewriteしようとしています。 /home/hoge/public_html/.htaccessには RewriteEngine on RewriteBase / RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php を記載しています。 これで www.example.com/^hoge/index.php にアクセスすると /var/www/htmlのindex.phpに飛ばされてしまいます。 ユーザディレクトリで実験しようと思ったのですがうまくいかないようです。 Apacheは2.2.9 osはCentos5.3です。 宜しくお願いします。
>>377 RewriteBase /
↓
RewriteBase /~hoge/
に変えてみ。
>>378 ありがとうございます。
要因が2つありましたが、そのうちのひとつでした。
助かりました。
もうひとつを書けよ
ruleの右側かな
382 :
nobodyさん :2009/08/24(月) 13:23:24 ID:TLZIhZKK
フレームワークをつかってて以下のような書き方をしてるんですが、
http://hoge.hoge.com/ にアクセスした場合、ブラウザだと表示されますが、
wgetをしてみると404になってしまいます。そのせいか、Yahooにクロールリクエストしようとしても
404ですといわれてしまいます。どこがおかしいかわかりますでしょうか?
http://hoge.hoge.com/ は実際は
http://hoge.hoge.com/index.php/引数/ みたいな感じになってます
<IfModule mod_rewrite.c>
RewriteEngine On
# uncomment the following line, if you are having trouble
# getting no_script_name to work
RewriteBase /
# we skip all files with .something
RewriteCond %{REQUEST_URI} \..+$ #
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule .* - [L]
# we check if the .html version is here (caching)
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
# no, so we redirect to our front web controller
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
383 :
nobodyさん :2009/08/25(火) 19:10:10 ID:X6yGpm6m
ごめん、rewriteは問題なさげぽかった
384 :
nobodyさん :2009/08/27(木) 22:20:10 ID:t3eEdAjR
apache2.0と2.2で処理変わった? 同じ式で悪禁がうまくいかないんだけど死ね
386 :
nobodyさん :2009/09/03(木) 20:22:37 ID:54RqrMPZ
>>386 君、質問する前に少しは人の忠告を聞きなさい
別スレで親切に諭してくれた人がかわいそうだ
388 :
nobodyさん :2009/09/03(木) 22:03:50 ID:54RqrMPZ
>>387 ちゃんと聞いてるよ。example.jpに直してるだろ。(ココは妥当な意見だと判断したので)
「マルチ質問扱いされて厄介な・・・」って部分は
そんなのどうでもイイと判断して無視した。
聞く立場だからって、言われたことに何でも従う訳じゃない。
自分で考えて「合理的だ」「その通り」と感じた意見だけに従う。
あっそ
ルート直下にaaaというディレクトリがあり、このディレクトリ以下のディレクトリにへのアクセスをルートのindex.phpに飛ばしたいのですが、
aaaに以下のように書いた.htaccessを置いてみたところ、
http:// 〜/aaaの場合はうまくいくのですが
http:/ 〜/
aaa/の場合がうまくいきません。
どうしたらいいでしょうか?
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . /index.php [L]
RewriteCond %{REQUEST_URI} ^/aaa RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . /index.php [L] をルートの.htaccessに追記したところ成功しました 置く場所からして間違ってましたねすみません…
なるほど。top.cgiはディレクトリインデックスのイメージでした。 逆はできるみたいですけどね。URLを変えずに表示ページを変える。
ん? 逆だと「表示されるページを変えずにURLを変える」になると思うが。
396 :
nobodyさん :2009/09/21(月) 01:20:03 ID:c3AXI/Cy
/q/{任意の文字列} というリクエストを /q?query={任意の文字列} にリダイレクトしたいので、 RewriteRule ^/q/(.+)$ /q/?query=$1 としました。 しかし、{任意の文字列}は、ただの文字列の場合もあれば、 "?を含むURL"の場合もあり、後者の場合は?の前までしか取得できませんでした。 ちなみに"?を含むURL"の?の後のクエリは不定です。 RewriteCond %{QUERY_STRING} でなんとかなるかと思ったのですが、クエリがあったりなかったりする場合どのようにかいて良いのか わからなくなってしまいました。 どなたかご教示いただけないでしょうか。よろしくお願いします。
397 :
396 :2009/09/21(月) 01:20:49 ID:c3AXI/Cy
3行目は /q/?query={任意の文字列} の間違いです。 失礼しました
QSAじゃ駄目なん?
399 :
396 :2009/09/23(水) 16:17:35 ID:???
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
402 :
400 :2009/10/08(木) 22:02:54 ID:???
>>401 回答どうもです。
ポスト先をディレクトリというのは
読み込むデータをディレクトリに入れとけ、ってことですか?
だとしたら、データはdat形式でディレクトリに格納してあります
>>402 ちゃうちゃう
今
<form action="./hoge/index.cgi" method="post">〜
と書いてるなら
<form action="./hoge/" method="post">
と書けってこと。
404 :
400 :2009/10/09(金) 17:40:46 ID:???
ありがとうございます とりあえずそう処理しておきました ちなみにmod_rewiteで修正する場合どう記述すればよいかわかりますか?
お世話になります。Kernel 2.6.18, Apache 2.2.3, PHP 5.1.6 です。 拡張子なしで呼び出された URL を同じ場所にある PHP に向けたいんですが、 サブディレクトリを含めた汎用的な書き方は可能でしょうか? 次のように PATH_INFO がついている場合でも、それを維持してファイル名の 部分だけを書き換えたいのですが。 /basename → /basename.php /sub/directory/basename → /sub/directory/basename.php /basename/ → /basename.php/ /basename/path/info → /basename.php/path/info /sub/directory/basename/path/info → /sub/directory/basename.php/path/info サブディレクトリ、PATH_INFOに含まれる "/" の数は固定ではなく、途中に "." (拡張子風の ".") を含む可能性があります。 "basename.php" と "basename" のように拡張子の有無だけが異なるファイルや ディレクトリが同じ場所に存在することはありません。
407 :
406 :2009/10/15(木) 01:29:52 ID:???
rewite->rewrite
uwariteを思い出した。
www.test.com/hoge/ を hoge.test.com/ にする書き方って どうすればいいでしょうか。てかそもそもこういうのって 出来るのかな?っていう。
410 :
nobodyさん :2009/10/20(火) 23:43:21 ID:5GhHv22w
>>409 それmod_rewriteじゃなくてmod_proxyじゃね?
素直にサブドメイン作ろうぜ 作れないならあきらめようぜ
412 :
409 :2009/10/21(水) 07:31:13 ID:???
どもです。hogeというホスト自体は設定してあるんです。 www.test.com/hoge1/ www.test.com/hoge2/ って感じにディレクトリが分かれていて バラバラのコンテンツが入っています。 これをhoge1.test.com/という風に別々のサイトのように見せたいと思っていてhttpd.confを 編集しました。 現状ですとwww.test.com/hoge1/でもhoge1.test.com/でも同じ内容が表示されるのですが SEO的によろしくないということで(スパム扱いされたりするとか)すべてhoge1.test.com/に 統一したいんです。 www有りとwww無しのアクセスを統一したりというのをmod_rewriteで出来たと思うので こういう書き換えも可能なのかなと。
あ、補足です。 ディレクトリを移動しない理由を書いていませんでした。 CMSのCGIが入っているんので移動すると更新が出来なくなってしまうのです。
415 :
409 :2009/10/22(木) 16:25:16 ID:???
>>414 ありがとうございました。
各コンテンツの中は相対パスで書かれているのでその記述で対応可能でした。
example.com<了解っす。感謝。
Thanks to blogging and online social networking, they are quick to share their knowledge and opinions with one another. ,
The crush I could always fall back on, no matter how much time had passed. ,
418 :
nobodyさん :2009/10/27(火) 02:04:24 ID:qLUEsO4U
419 :
418 :2009/10/27(火) 02:26:00 ID:qLUEsO4U
言い忘れ 2.2系で動くやつでお願いします
あ、%はまずいかw
422 :
418 :2009/10/28(水) 23:41:36 ID:VXoEwsZU
ログ見た? ところで、 RewriteRule ^.* /check.php [NC,L] これなら、正常に表示される? で、順にhttpとか//とか試せば
あげ
425 :
nobodyさん :2009/11/08(日) 14:05:56 ID:35LWJ8zb
してくれ。
427 :
◆cCWqf4GI8E :2009/11/08(日) 18:49:10 ID:w74YnUY2
425は偽。俺が本物か証明できるかどうかはわからんがトリップをつける
IIJがアク禁になって当分投稿できなかった。すまない。
>>423 # cat /var/log/httpd/access_log
192.168.56.1 - - [28/Oct/2009:23:40:43 +0900] "GET /check/
http://foo.jp/bar/baz/ HTTP/1.1" 404 314 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) Pathtraq/0.9"
# cat /var/log/httpd/error_log
[Wed Oct 28 23:40:43 2009] [error] [client 192.168.56.1] File does not exist: /var/www/html/check
RewriteRule ^.* /check.php [NC,L]にしたらInternal Server Errorになった
# cat /var/log/httpd/access_log
192.168.56.1 - - [29/Oct/2009:07:19:07 +0900] "GET /check/
http://foo.jp/bar/baz/ HTTP/1.1" 500 613 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3 (.NET CLR 3.5.30729) Pathtraq/0.9"
# cat /var/log/httpd/error_log
[Thu Oct 29 07:19:07 2009] [error] [client 192.168.56.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
なんかerror_logの方は記録できなかったっぽい?
> RewriteRule ^.* /check.php [NC,L]にしたらInternal Server Errorになった それ、.htaccessに書いてる?httpd.confに書いてる? RewriteRuleで複数書き換えると無限ループすることがあるよ。 特に.htaccessのとき。
単発の質問を偽物扱いして退けようとするなんてかっこいいなw
430 :
nobodyさん :2009/11/10(火) 07:44:07 ID:sgFUme3q
>>428 .htaccessに書いてた・・・
httpd.confなら
<Directory /var/www/html>
RewriteEngine On
RewriteRule ^.* /check.php [NC,L]
</Directory>
的なことを書けばいいんだよね?
<Directory>に書いたら、ディレクトリコンテキストだから基本的に一緒 ディレクトリコンテキスト外で書いた方がループしない。 ループするのとは直接関係ないかもだけど、実ファイルがあったら書き換えないっていう指定も追加するといい RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} .ico$ [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L]
誘導されて来ました。 早速質問なのですが、 test.phpというファイルがリクエストされた場合に、index.php?page=test.phpにrewriteするにはどのようにすれば良いでしょうか? .htaccessに RewriteRule ^([0-9A-Za-z.]+)$ index.php?page=$1 [L] と記述してみたのですが、$_GET["page"]の値がindex.phpになってしまいます。 拡張子をtest.htmlにすると上手くいくのですが。。。 よろしくお願いします。
index.phpへのアクセス → index.php?page=index.php になってるんじゃないの? RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([0-9A-Za-z.]+)$ index.php?page=$1 [L]
>>432 あと、オプションをQSAにしてみたら?
>>433-434 遅くなりまして申し訳ないです。
期待していた通りに動作しました。ありがとうございました。
436 :
nobodyさん :2009/11/22(日) 04:53:44 ID:kXZj6gQw
日本語をURLエンコードしているんだけど、それを半角英数に書き換え戻したいんだが。 無理だな。
437 :
nobodyさん :2010/01/13(水) 21:00:23 ID:M9fqIs3k
携帯端末以外からのアクセスをIPで弾いてるのだけど… PCからのアクセスの場合どこに飛ばしたものか苦慮してる。 そこでhtaccessの挙動がまだよくわからんのだけど、 htaccessって最後まで読まれてから、その全ての記述が実行されてるんでしょうか。 それとも、上から順番に実行していって、例えば RewriteRule で [L]を末尾につけた場合はそこで処理がとまったりするんでしょーか。
設定ファイルに書かれた順序を考慮して動作するモジュールがあるというだけで、 設定ファイル自体はスクリプトではないので最後まで読まれます。
まさかApacheスレを探していて、質問しようと思っていた項目専用のスレがあるとは・・・ 今後宜しくです
>>1 のリンクをザッとみて良く分からなかったのですが、
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
の !\.(js|ico|gif|jpg|png|css)$ の部分の意味が良く分かりません
PHPやJavaScriptとは違うようですし、正規表現のような気もしません
これら! \ $の文字は言語で言うと何に分類されるのでしょうか?
Apacheは専門的に勉強したことがないのですが、Apache専用の言語(演算子)なのでしょうか?
441 :
440 :2010/01/15(金) 15:38:59 ID:???
ごめんなさい 普通に正規表現でした・・・
442 :
nobodyさん :2010/01/21(木) 17:13:10 ID:r/4DT42h
RewriteCondの書き方でわかる方いたら教えてください 「base/pic」に入ってる画像のみ、rewriteしたくて、ほかはそのまま 表示したいのですが、どう書けばいいでしょうか? RewriteCond %{REQUEST_URI} !^.+\.(gif|jpg|jpeg|png)$ ですべての画像を弾くのはできそうなんですが…
RewriteCond %{REQUEST_URI} base/pic.+\.(gif|jpe?g|png)$ /dummybase/pics0001.gif も条件に当てはまるけど。
444 :
nobodyさん :2010/01/22(金) 14:19:51 ID:siFOym7C
>443 遅くなりましたが ありがとうございます!
445 :
nobodyさん :2010/01/25(月) 08:26:20 ID:ckid/8q/
Redirect済みかどうかの判定ってできないんでしょうか? ブラウザ上では /main/ が / になるように、301でリダイレクトしたいんですけど、 内部的には / を /main/ にしたくて / でも /main/ でも同じページが返されるようにしたいんです。 現状 ↓ RewriteRule ^/*main/?(.*)/*$ $1 [L,R=301,QSA] RewriteRule ^$ main/ [L,QSA] これだと無限ループになるんで、上のルールがリダイレクト済みなら評価しないっていうことが できればなあと思っています。 内部リダイレクトはNSフラグによるサブリクエストにはならないようですし、 REMOTE_ADDRでアクセスした時のURLがわかればと思ったけど それも内部リダイレクトで上書きされてしまうようでお手上げになってしまいました。
設計の問題だと思うけど。 例えば/index.cgiとか何らかのスクリプトを経由して /main/index.htmlを表示するようにバイパスすればいーんじゃねーの。
mod_headerでダミーのヘッダをセットして2度目かどうかをチェックっていうのがあったな。 クライアントが変態でそのヘッダを自前で付けてきたら違う動作するだろうけど。
449 :
445 :2010/01/26(火) 20:06:20 ID:???
レスありがとうございます。
>>448 で一考したんですが、同等の考え方で、どうせQSAつけてるんだしって思って
?redirected=1みたいなクエリ付けてその判定を利用することにしました。
450 :
nobodyさん :2010/02/03(水) 11:44:00 ID:yhcV776z
RewriteRule ^s/?f=([0-9A-Za-z)]+)$ /search/?f=$1 [L] と書いたら、表示は出来ますが関数が無効になっています。 RewriteRule ^s/([0-9A-Za-z)]+)$ /search/?f=$1 [L] の場合では、関数が有効になっています。 出来れば「?f=」の形にしたいのですが、どうすれば良いでしょうか?
メタ文字だからじゃない?
452 :
nobodyさん :2010/02/03(水) 12:28:24 ID:yhcV776z
>>451 「全くその通りだ」と思って下の様に変更したのですが、変化がありません。
何か間違っていますか?
RewriteRule ^s/\?f=([0-9A-Za-z)]+)$ /search/?f=$1 [L]
変換前はどんなURLなん?
URLの?以降はRuleではマッチしないから、CondでQUERY_STRINGとマッチしておいて Ruleで%数字の参照を使って値を引っ張るとさっさと教えてやれw
断る!
と思ったけど・・・
QSAフラグでもいいと思うよ Query String Appendって意味 って誰か教えてあげて
/username/test.phpにアクセスしたときにサーバー上の/u/s/e/username/test.phpにアクセスさせるようにするにはどうすればいいでしょうか? 文字列を一文字ずつにディレクトリを分解しておきたいのです。
(.)(.)(.)(.*) を $1/$2/$3/$4 とか
ユーザ名ごとにディレクトリ作ってんのかw
>>459 ありがとうございます
((.)(.)(.).*) $2/$3/$4/$1でいけました
>>460 何かいい方法があれば教えてくださいませんか
一つのディレクトリに詰め込むとすると数万から数十万のファイルやサブディレクトリを作ることになりそうです
それで何か問題あるの?
数万のファイルやディレクトリが1か所にあると 操作が非常に重くなって使いものにならなくなる
GUIでやらなきゃいいんじゃね?
CUIでの話をしているのだが
まあ最近のOSのファイルシステムならあまり心配いらないのかもしれないね 環境書いてないからそんな前提入れられないけど
どういう操作すると重くなるの?
CUIどころかそのディレクトリのファイルの一つをプログラムから 読みに行こうとするだけで重くなる。SunOSの古いやつだけど もし持ってたらやってみるといい
新しくすれw
ディレクトリ分けに賛成
FC2のブログも画像ファイルはユーザ名の頭三文字を1字ずつディレクトリ作ってるね まさかURL上だけ分けてるってことはないだろうけど
そんなときはReiserFS
例えばext2/3だとサブディレクトリの数は32,000個までという制限がある また、1ディレクトリのファイル数も実用上1万程度が限界点となっている そういうFSでは458みたいな工夫が必要になるわな
ReiserFSは作者が奥さん殺しちゃったからな
へー で?
^/$ ??????
oh, i'd been misled.
I like watermelon.
httpsのみrewriteできないんだけど、そんな設定とかあんのかな?
これはhttp→httpsにしてくれるけど、
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} (^/aaaa.php.*$)
RewriteRule /(.*)$
https://%{HTTP_HOST}%{REQUEST_URI} これはhttps→httpにしてくれない
RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !(^bbbb.php.*$)
RewriteRule /(.*)$
http://%{HTTP_HOST}%{REQUEST_URI} httpにしてくれないどころか、適当なRewriteRule書いても反応して
くれてないんで、RewriteCond %{SERVER_PORT} ^443$ で https を
捕まえてくれてないっぽい。{HTTPS} on|of でもダメでした。
なにがまずいのか、誰かボスケテ。
%{SERVER_PORT}が443になってるかどうかは確認した?
>>481 オス。
ssl.conf に Listen 443
httpd.conf に Listen 80
ssl.confはちゃんと読み込まれてる。
別件でパケットキャプチャ使ったんだけど、ちゃんと80、443で動いてるみたい。
なんだろうなー。よく解ってない人が管理してたサーバーの引継ぎで散々苦労
したんだけど、これが片付けば一段落つくのにドン詰まり;
483 :
482 :2010/02/16(火) 09:10:16 ID:???
念のためにPHPから echo $_SERVER['SERVER_PORT'] で出してみた。 http,https、それぞれ80,443 になってる。
いや、そのrewriteルールに到達してない可能性があるんじゃない? rewriteLogを確認するか、 RewriteCond %{SERVER_PORT} ^443$ のところで、環境変数にでも入れて、その行に来てるかどうかを確認してみたらどうかなと。 よくあるのは、httpのvirtualhostとsslのvirtualhostを分けてて、 そもそも、sslのときはそのルールは適用されてないとかね。
485 :
482 :2010/02/16(火) 10:34:15 ID:???
>>484 返答ありがと。
rewrite_log確認しました。
>480 の記述で、
httpの時は RewiteRule の apply pattern がふたつ出力された後に
httpの時のRewriteCond の評価やってるけど、httpsの時は何も出力
されない。
RewiteRuleの時点でひっかかってくれてないな。
他の記述を全部とっぱらって、 ^443$ 関連の記述のみにしても、なにも
出力されてない。パッと見では https の時はガン無視して素通りされて
るような感じなんだよなー。
人が設定したモンなんでもしやと思って virtualhost も確認してみたけど、
それは無かった。
なんだろう???
> パッと見では https の時はガン無視して素通りされてるような感じなんだよなー。 その通りだろう
httpsの時はallowoverrideがNoneとか
488 :
482 :2010/02/17(水) 15:38:46 ID:???
>>487 .htaccess は使わずに httpd.conf に書いてる。
じゃあ描いてる場所だな
490 :
482 :2010/02/17(水) 16:40:58 ID:???
>>489 んー、conf.d とこのファイルも怪しいな。
も一回確認してくる =3
491 :
nobodyさん :2010/02/26(金) 00:23:34 ID:GCPXDWut
/index.html /m/index.html htaccessを使用して 見た目上のURLは変えずに PCからなら /index.html 携帯からなら/m/index.html に飛ばすことは可能でしょうか? RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank) RewriteRule ^$ /m/ [R] これだと携帯でアクセスすると見た目上のURLが/m/になってしまいます。 ご教授お願いします。
それでいいんじゃないの
[R] を取っ払えばよさそう
494 :
nobodyさん :2010/03/25(木) 10:21:37 ID:Vmjt6F6A
mod_rewriteの設定について
mod_rewriteの設定について
現在 *.test.example.comへのアクセスはドキュメントルートが/home/homepage/public_html/ になっています。
サブドメイン名でアクセスするディレクトリを変更したいです。
例)
xxx.test.example.com → /home/homepage/public_html/xxx/
yyy.text.example.com → /home/homepage/public_html/yyy/
以下のように設定してみたのですが、思い通りにいかない事がいくつかあります。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[a-z]+\.test\.example\.com$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([a-z]+)\.test\.example\.com(.*)$ /$1/$2
</IfModule>
http://xxx.test.example.com/index.html → ○
http://xxx.test.example.com/ → ×(index.htmlが表示されて欲しい)
http://xxx.test.example.com/img/img.jpg → ×(/xxx/img/img.jpg は存在します)
分かる方よろしくお願いします。
最初のはDirectoryIndexで再投函されたあとの挙動だろうけど 下の方は、xxx以下にrewriteしてから、-fチェックをするようにしてみたら?
それ、mod_vhost_alias使った方がいいんじゃね?
497 :
nobodyさん :2010/04/20(火) 05:07:38 ID:rovGBKgZ
example.com/aaa.php?x=1&y=2 これを example.com/bbb/?x=1&y=2 にURLを書き換えたいのですがうまくいきません。 どう書けば良いでしょうか?よろしくお願いします。
/aaa.php /bbb/ [L] と,テストもせず勘でレスしてみる
499 :
497 :2010/04/22(木) 08:40:39 ID:zYh2UuQ3
>>498 ありがとうございます。うまくいきました。
最後にもう1つだけ質問させてください。
example.com/aaa.php?x=1
これを
example.com/bbb/?y=1
に書き換えたいのですがよろしくお願いします。
xをyに書き換えたいです。
503 :
nobodyさん :2010/08/02(月) 16:59:31 ID:4s58A5gB
age
試してみたことを全部書いてみれば?
505 :
nobodyさん :2010/08/20(金) 14:39:18 ID:vi5gBlqp
すいません、 httpsでアクセス時に、特定のURLを除いて全てhttpにリダイレクトするようにしたいのですが、 どのような書き方をすればよいでしょうか?調べたのですが分からなくて・・ 教えていただけると嬉しいです。
無限ループで困っています。 やりたいこと HTML5対応のブラウザで自宅のファイルサーバの中にある mp4動画ファイルを独自に設置したプレイヤーで再生する。 やったこと mp4が置いてある場所をmod_autoindexで表示させる mp4ファイルがクリックされたらphpに飛ばしてプレイヤーのHTMLを生成 上記のmp4ファイルがクリックされたらphpに飛ばす。という部分を mod_rewriteで実現しようと、.htaccessに以下のような記述をしました。 RewriteEngine On RewriteRule (^.*\.mp4$) video.php これによりhoge.mp4がクリックされたらvideo.phpで <video src='hoge.mp4'>と展開されますがこのsrc='hoge.mp4'が 無限ループの原因のようです。 よろしくお願いします
pathを限定すればいいと思う <video src='./hoge.mp4'> として RewriteEngine On RewriteRule (^[^\.]+.*\.mp4$) video.php
> これによりhoge.mp4がクリックされたらvideo.phpで > <video src='hoge.mp4'>と展開されますがこのsrc='hoge.mp4'が > 無限ループの原因のようです。 まんまやん。 展開したファイルで自分にリクエストが来るんだから、 video.php からvideo.phpを呼んでいるようなもの。 mod_rewirteじゃなくてロジックを見直したら?
hoge.mp4?m=d などとパラメータ付きのアクセスの時はvideo.phpに飛ばさないというルールを付ければ?
晴れてるのに寒い
511 :
nobodyさん :2010/12/30(木) 15:12:15 ID:ZxF9k5/L
http://www.hoge.com/dir/index.cgi?cat=0&page=1 ↑このアドレスを、↓このように書き換えたいのですが、
http://www.hoge.com/dir/0/1 &page=1の部分が上手く渡せていないらしく、上手く表示できません。
(page=1が2ページ目、何もない場合は1ページ目)
1ページ目の
http://www.hoge.com/dir/0は表示できます 。
.htaccessの添削をお願いします。
現在の.htaccessは以下の通りです。
DirectoryIndex index.cgi
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteBase /dir/ (現在コメントアウト)
RewriteRule ^(.*)$ index.cgi?cat=$1 [L]
RewriteRule ^(.*)/(.*)$ index.cgi?cat=$1&page=$2 [L,QSA]
使用しているサーバはxreaで、お金を払って広告を消している状態です。
あー、今できました。 ([0-9]+)これでした。。。。 スレ汚し失礼しました。
513 :
nobodyさん :2011/01/07(金) 14:14:51 ID:aOiY5pIw
ひとつ上のレスも見れんのか
RewriteRule ^/news/(20[0-9][0-9].*)$ /cgi-bin/news?file=$1 これは動くんだが、反対に RewriteRule ^/cgi-bin/news?.*?file=(....).*$ /news/$1 にすると動かない。 リライトする前の元のURLがCGIの動的ページの場合の引数を変数に格納するにはどうしたらいいの?
書き方が違った、動かないのは RewriteRule ^/cgi-bin/news.*?file=(....).*$ /news/$1 ちなみにPerlのスクリプトとして、 $line=~ s/news.*?file=(....).*$/news\/$1/; とするとちゃんと動く。
Rewritehではcgiとかの引数部分の?以降の行をマッチさせることはできないよ。
環境変数のQUERY_STRING見ればおk
519 :
nobodyさん :2011/01/25(火) 11:12:35 ID:y5ZC6NKj
質問させてください やりたいことは www.aaa.com/hoge/○○.php?id=123 にアクセスがあった場合 /home/user/public_html/test/○○.php?id=123 に移動させて ○○.phpで name=hoge id=123 と表示させたい ○○.phpはindex.phpやmail.phpなど色々対応させたい です。よろしくお願いします。
ぐぐれば山ほどサンプルあるよ
やればえーがな 何が質問なのか判らない
じゃあそのルール書いてみ
523 :
519 :2011/02/03(木) 22:51:57 ID:???
解決しました ありがとうございました
phpベースのサイトを運営しているのですが、SEO対策のためにサイト全体をhtmlとして動作するように変更したいと考えて
います。※サイト上にはphpファイルしか置かない。(htmlファイルは設置しない)
具体的には以下のようにしたいと考えています。
※サイト上に設置している「phpinfo.php」の表示を例にあげています。
1.htmlアクセス(
http://phpinfo.html )を、phpにリライトする。
つまり、URLは「
http://phpinfo.html 」のまま
「
http://phpinfo.php 」 の実行結果を返す。
------------------------------------
RewriteRule (.*).html$ /$1.php [L]
------------------------------------
2.phpアクセス(
http://phpinfo.php )を、htmlにリダイレクトする。
つまり、URLが「
http://phpinfo.html 」となり、
「
http://phpinfo.php 」 の実行結果を返す。
------------------------------------
RewriteRule (.*).php$ /$1.html [R=302,L]
------------------------------------
上記の対応を実際してみたのですが、なぜかリダイレクトがループしてしまいました。
1.と2.のどちらか一方のみであれば正常動作するのですが、両方記述するとリダイレクトがループします。
原因と対処法をご存知のかたがおられましたらお手数ですがご教授よろしくお願いいたします。
ドメインはどこ行った?
ケース2って要らないんじゃない?
2ちゃんって要らないんじゃない?
ケース2やらないとPHPのほうをGoogle先生にインデックスされちゃったら若干評価下がりそうだよ
rewriteRuleだけじゃ無理かもね RewriteCond を組み合わせればなんとかなるかも知れない。具体的に書けてないですが
Lが付いてるからループせずに止まりそうな気もするけど… RewriteLogにはやっぱり延々と出続けるんだよな。
[L] で書き換えは止まるけど書き換えたリクエストがまた来てぐるぐる。 要件どおりならphpファイルを全部 \.html$ にリネームして(ソースの該当個所等も書き換え) これで済むような。 AddHandler application/x-httpd-php .html
勝手に処理変えるの止めて欲しい 昔のバージョンのconfが間違った動きするのでムカつく
httpd.confの<VirtualHostの中にRewriteCondとRewriteRuleを 書いても何も変化がないのでそもそもmod_rewriteが機能してるかどうかが 不安になってきた・・・。どの環境でも必ず動くテスト確認みたいなのってないですかね?
536 :
nobodyさん :2011/06/03(金) 10:13:42.69 ID:b3b8utu4
二段リライトって使えたっけ? 一度リライトして偽装してるURLを、 もうちょい見通し聞くように書き換えたいんだけども。 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^entry/(.+)$ hoge.php?id=$1 [L] としてたとして、 entry/〜へのアクセスをrenew/〜に遷移させるみたいな。 新規アクセスは書きなおすだけでいいけど、クローラーとか旧リンクへのアクセスが死んじゃう。 RewriteRule ^renew/(.+)$ hoge.php?id=$1 [L]
RewriteRule foo.php pplog2/index.php [L] pplog2のフォルダにfoo.phpからアドレスを変えずに読み込みたいのですが、 やると、pplog2/index.phpないの相対パスがくずれてます。 fooのアドレスでpplog2/index.phpを正常に動作させる方法はあるでしょうか? 目的は、pplog2内のファイルをpplog2内に封じ込めるためです。 トップのフォルダにはfoo.php(indexです。)以外のスクリプトファイルを pplog2内におさめたくおもっています。
もしかして、 index.php に HTML の BASE を設定すればいいのかもしれない。
>もしかして、 index.php に HTML の BASE を設定すればいいのかもしれない。 ヒントありがとうございます。 調べてみます。
>>538 神としか言えない。
一歩前にすすみました。
神の力を以てしても 一歩しか進まない。
542 :
nobodyさん :2011/06/14(火) 04:50:49.31 ID:HB8g/tAq
チョットスレチですが、apacheのスレが見当たらなかったもので。。。質問失礼します。 error_logにrefererが強制的に入ってるんですけど、これって、Apacheのデフォルトなんでしょうか? httpd.confを見たのですが、特にログ周りはデフォルトのままのようで。 Server version: Apache/2.0.64 Server built: Mar 7 2011 23:10:31 です。どなたか分かるかたいらっしゃいましたら、よろしくお願いします。(´・ω・`)
スレタイ読めないの?
チョットスレチですが、apacheのスレが見当たらなかったもので。。。
だから?
なんで教えてくださいの一言が素直に言えないの?
よくわからないけど RewriteLog 有効にして追ってみるとだいたいわかるんじゃないかな。
>>548 言葉足らずですみませんでした。よろしければ教えてください。お願いします。
>>549 RewriteLog追ったのですが
[rewrite/sid#1975720][rid#3bbce98/initial] (3)
split uri=function/test1:aaa/test2:bbb/test3:ccc/test1:aaa/test2:bbb/test3:ccc?test3=ccc
-> uri=function/test1:aaa/test2:bbb/test3:ccc/test1:aaa/test2:bbb/test3:ccc,
args=test3=ccc&test2=bbb&test1=aaa
と逆に増えていってしまってるという点までは把握できたものの、
どの記述を調整すればうまく嵌まるのかよく見えていない状態です。
偉そうに言った
>>548 は大抵このあとレスしない法則。
たら偉ぶりたかっただけw
たら?
たら!
554 :
550 :2011/06/21(火) 10:06:52.95 ID:???
分かる方居ませんか…… まだ試行錯誤しつつ悩んでいます
RewriteEngine On RewriteLogLevel 3 RewriteRule ^/function/([^:/]+):([^:/]+)$ /function?$1=$2 [L,QSA] RewriteRule ^/function/([^:/]+):([^:/]+)(/.+)$ /function$3?$1=$2 [N,QSA] で、 (2) init rewrite engine with requested uri /function/aaa:1111/bbb:2222/ccc:333 (3) applying pattern '^/function/([^:/]+):([^:/]+)$' to uri '/function/aaa:1111/bbb:2222/ccc:333' (3) applying pattern '^/function/([^:/]+):([^:/]+)(/.+)$' to uri '/function/aaa:1111/bbb:2222/ccc:333' (2) rewrite '/function/aaa:1111/bbb:2222/ccc:333' -> '/function/bbb:2222/ccc:333?aaa=1111' (3) split uri=/function/bbb:2222/ccc:333?aaa=1111 -> uri=/function/bbb:2222/ccc:333, args=aaa=1111 (3) applying pattern '^/function/([^:/]+):([^:/]+)$' to uri '/function/bbb:2222/ccc:333' (3) applying pattern '^/function/([^:/]+):([^:/]+)(/.+)$' to uri '/function/bbb:2222/ccc:333' (2) rewrite '/function/bbb:2222/ccc:333' -> '/function/ccc:333?bbb=2222' (3) split uri=/function/ccc:333?bbb=2222 -> uri=/function/ccc:333, args=bbb=2222&aaa=1111 (3) applying pattern '^/function/([^:/]+):([^:/]+)$' to uri '/function/ccc:333' (2) rewrite '/function/ccc:333' -> '/function?ccc=333' (3) split uri=/function?ccc=333 -> uri=/function, args=ccc=333&bbb=2222&aaa=1111 (2) local path result: /function あってる?
556 :
550 :2011/06/22(水) 09:04:49.71 ID:???
>>555 うおおおおおお ありがとうございます! やはり正規表現がだめだったんですね……。
ローカルのXAMPPで試してみたところ、パスの扱いが少し異なるのか、
RewriteRule ^function/([^:/]+):([^:/]+)$ /function.php?$1=$2 [L,QSA]
RewriteRule ^function/([^:/]+):([^:/]+)(/.+)$ /function$3?$1=$2 [N,QSA]
といったらうまく動きました。
557 :
nobodyさん :2011/07/25(月) 21:26:52.15 ID:RVWZInKC
>>547 と似たようなことですが
aaa.com/aaa/
にアクセスすると
aaa.com/data?id=aaa
のページを表示させる方法を教えて下さい
559 :
nobodyさん :2011/07/25(月) 22:19:35.70 ID:RVWZInKC
>>558 それはわかりますが
普通にrewrite ^/(.*)/$ data?id=$1
とやってもできませんでした
560 :
nobodyさん :2011/07/26(火) 00:07:50.77 ID:z0R0U2El
意図通りに動かなかったらまず RewriteLog と RewriteLogLevel
●実現したいこと: ・メンテ時にステータス503を返しつつ、ブラウザに表示されるURLはそのまま ●環境: ・Apache2.2.19、SSL必須 ●問題: ・SSL接続だとURLを maintenance.html に書き換え、ステータス200を返してしまいます。× ・しかし、HTTP接続であれば、URLそのままで503を返すことができます。○
562 :
561 :2011/08/14(日) 11:00:30.92 ID:???
●httpd.conf: <VirtualHost _default_:443> (省略) ErrorDocument 503 /maintenance.html <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !=/maintenance.html RewriteRule ^.*$ - [R=503,L] </IfModule> (省略) </VirtualHost>
563 :
561 :2011/08/14(日) 11:11:13.04 ID:???
●rewrite.log:
escaping
http:// ○○○/maintenance.html for redirect
redirect to
http:// ○○○/maintenance.html [REDIRECT/302]
●access.log:
"GET /maintenance.html HTTP/1.1" 302 221 "-"
"GET /maintenance.html HTTP/1.1" 200 477 "-"
SSL接続でも503を返しつつ、URLを書き換えない方法はありませんか?
詳しい方よろしくお願いしますm(__)m
564 :
nobodyさん :2011/08/14(日) 11:25:39.79 ID:ofwTTK+A
RewriteLogLevel いくつ? 全く試していないけど RewriteCond %{HTTPS} on もダメ?
565 :
561 :2011/08/14(日) 12:28:27.03 ID:???
すみません、↓の設定をコメントアウトしたらできました。
/maintenance.html を返すときにリライトしてたのが原因みたいです。
503以外にも↓の設定の影響がないか、調べる必要が出てきました_no
レスありがとうございました。
RewriteCond %{REQUEST_URI} !(^/ssl/.*$)
RewriteRule /.*$
http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteRule ^hoge/(a|b|c)\.html$ foo.cgi?hoge=$1 こんな感じのルールを書いたところ、アクセスはできるのですが、 hogeディレクトリを用意しないと、 foo.cgi側で行われるクエリ処理(hoge=$1のところ)が正常に受理されず、 意図した動作にはなりませんでした。 自分のローカル環境のWindowsではそんなことにはならなかったのですが、 サーバのFreeBSD環境にアップロードしたらそのようになりました。 hogeディレクトリは必ず用意しないといけないのでしょうか?
/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> 正しい書き方を教えて頂けますでしょうか。
>>567 間違ってるかもしれないが、 $1 なのかな?
${REQUEST_FILENAME} じゃないの?
569 :
568 :2011/08/18(木) 23:25:11.63 ID:???
>>567 まぁ、ダメだったらとりあえずログ吐いて確認しよう
570 :
nobodyさん :2011/08/18(木) 23:32:56.71 ID:5ZXSgAe6
RewriteLog 便利だからテスト中はどんどん使おう。
>>568-570 アドバイスありがとうございます。
さくらのマルチドメイン機能を使っているからか、
シングルドメインで使えそうな記述が機能せず、
模索しているうちに以下のコードで動くようになったので
とりあえず張っておきます。ちなみに、なんで
動くかはっきりとした理由は分かりません。(笑)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /aaa
# RewriteLog "/domain1/aaa/rewrite_log"
# RewriteLogLevel 2
#
>>570 下記によると .htaccess での記入は非対応なのでさくらで使えず断念
#
http://net-newbie.com/trans/mod_rewrite.html#RewriteLog # ブラウザが gzip 対応の場合
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond %{
HTTP:Accept-Encoding} gzip
RewriteCond "%{DOCUMENT_ROOT}/domain1/aaa/cache/$1.gz" -f
RewriteRule ([^/+]+.xml)$ "/aaa/cache/$1.gz" [L]
# ブラウザが gzip 非対応の場合
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{QUERY_STRING} !.*=.*
RewriteCond "%{DOCUMENT_ROOT}/domain1/aaa/cache/$1" -f
RewriteRule ([^/+]+.xml)$ "/aaa/cache/$1" [L]
</IfModule>
572 :
nobodyさん :2011/09/05(月) 10:23:13.89 ID:K5/8sokL
以下のような.htaccessを書いたのですがうまく動作しません DirectoryIndex my.cgi RewriteEngine On RewriteCond %{REQUEST_URI} ^(t(est)?)/ RewriteRule !\.(css|js|gif|jpg)$ my.cgi [NC,NE,L] ※URLはディレクトリ以下のパスのみの記載です / => DirectoryIndexに従いmy.cgiにアクセス/画像等はRewriteRuleに従い問題なし /test/test.cgi => RewriteCondに従いtestまたはtディレクトリ以下にアクセス(問題なし) /login/ => File does not exist: ...login(my.cgiにアクセスしない) エラーについては当初正しくmy.cgiが起動されていましたが、 3行目のRewriteCondを追加したらうまくいかなくなりました(コメントアウトすると今でも正常) ですが、どうしてエラーになるのかがわかりません。 ・testまたはtディレクトリにアクセスされたときはリクエストどおり実行 ・画像(等)以外へのリクエストはmy.cgiへ転送 ですので、理屈は通ってるようにも思えるんですが、何がよくないんでしょうか
頭
>>572 うむむ…解読不能。
先にやりたい事を書いてから設定内容を張ったほうが分かりやすいと思うよ。
575 :
nobodyさん :2011/09/08(木) 22:18:32.10 ID:W+wdQIDX
RewriteLogを設定して結果を貼ってみたら? 何度目だこのアドバイス。
RewriteCond %{REQUEST_URI} !my\.cgi$ とか足したらどうなる?w
>>577 まずyahooのサーバーに侵入します。
わろた
581 :
nobodyさん :2011/11/09(水) 19:26:51.26 ID:Rf6X/ojT
質問させてください
URL
http://example.com/hoge/search?key=aaa 上記のURLでtestディレクトリのsearch.phpにアクセスして
id=hoge
key=aaa
を取得したい場合、RewriteRuleはどう書けば良いでしょうか?
ちなみに下記のように書いてますがkeyは取得できてidが取得できません。
RewriteRule ^(.*)/search/ test/search.php?id=$1 [L]
よろしくお願いします。
>>581 もともと書いてある内容が間違えてるような気がするが
RewriteRule ^/([^/]+)/search /test/search.php?id=1 [L,QSA]
で
var_dump($_GET) した結果が
array(2) {
["id"]=>
string(4) "hoge"
["key"]=>
string(3) "aaa"
}
ミスった RewriteRule ^/([^/]+)/search /test/search.php?id=$1 [L,QSA] の間違い
584 :
nobodyさん :2011/11/09(水) 20:38:40.68 ID:Rf6X/ojT
>>583 おお!ありがとうございます
QSAオプションを知りませんでした
585 :
nobodyさん :2011/11/10(木) 06:47:00.47 ID:BWllPMdu
mod_rewriteスレなんてあったんだ
586 :
nobodyさん :2011/11/12(土) 01:36:59.70 ID:hq4h+fDO
構いません
588 :
586 :2011/11/12(土) 21:57:30.12 ID:hq4h+fDO
なんとなく自己解決しました。ありがとうございました。
589 :
nobodyさん :2011/11/26(土) 15:22:44.10 ID:b2PvvF1A
mod_rewriteにより、以下のリライトをしたいです。
http://aaaaa.co.jp/ ⇒
http://bbbbb.co.jp/aaaaa/ Apacheの設定として、httpd.confに以下のような設定を書きました。
# ループ防止
RewriteRule ^/aaaaa/$1 - [L]
# リライト
RewriteCond %{HTTP_HOST} ^aaaaa\.co\.jp [NC]
RewriteRule ^(.+)$ /aaaaa/$1 [L]
これでできると思ったのですが、どうしても aaaaa 以下の index.html を読んでくれません。
具体的には、DirectoryIndexとして、
DirectoryIndex index.html index.php
という設定をしているのですが、aaaaaディレクトリには index.html が存在しているにもかかわらず、アクセスすると「NotFound:/aaaaa/index.phpがありません」となります。
RewriteLogを出力してログを見てみると、以下のような流れになっているようです。
1.[initial] / でのRewriteルール確認
2.[subreq] index.html でのRewriteルール確認
3.[subreq] index.php でのRewriteルールの確認
4.[initial/redir] /aaaaa/index.php でのRewriteルールの確認【一致】
index.php を用意すると、ちゃんと index.php が表示されるのですが、index.html は表示できず・・・。
どなたか、解決法を教えてください。よろしくお願いいたします。
591 :
nobodyさん :2012/03/08(木) 05:51:39.56 ID:1iBrsBES
RewriteCond %{REQUEST_FILENAME} !(.*jpg$|.*gif$|.*png$) [NC]
htaccessをいじって 動的アドレスを静的にしたつもりですが 静的アドレスでアクセスできますが そのアドレスリンクをクリックすると ブラウザ上部には 動的アドレスが出てきます。 どうしたらブラウザ上部のアドレスも 静的になりますか?
japanese, please.
595 :
nobodyさん :2012/04/05(木) 20:43:11.48 ID:pTiVcNwb
ただのファイルリクエストのように見えるURLをmod_rewriteで query stringを使った動的なCGI呼び出しにリダイレクトするよう にしたらロケーションバーにはリダイレクト後の結果が出ている。 最初のアクセス通りのパスを残しておくことは出来ないか? だと思う。
596 :
593 :2012/04/05(木) 23:03:05.06 ID:???
(1)
http://xxx.xxx.jp/index.cgi (2)
http://xxx.xxx.jp/index.html (1)が本来のアドレスですが
(2)のアドレスにしたいのです。
.htaccessを
RewriteEngine on
RewriteRule ^index.html$ index.cgi
と書いて
アドレスバーに(2)を入力すると
(1)にアクセスできまして
アドレスバーには(2)が表示されたままです。
ブラウザの中のリンクをクリックして
(1)にアクセスすると
アドレスバーの表記が(1)になります。
この時もアドレスバーに
(2)が表示されたいのですが
.htaccessの書き方を教えて下さい。
<a href="/index.html" title="バカ">
htaccessをいじって 動的アドレスを性的にしたつもりですが 性的アドレスでアクセスできますが そのアドレスリンクをクリックすると ブラウザ上部には 動的アドレスが出てきます。 どうしたらブラウザ上部のアドレスも 性的になりますか? ~~~~
.htaccess上で、変数のようなものを使うことはできないのでしょうか? $domain = example\.com RewriteCond %{HTTP_HOST} ^www\. $domain RewriteRule〜 RewriteCond %{HTTP_HOST} ^asia\.$domain RewriteRule〜 などと、先頭の一行で多数のCondを一括して変更したいのです。 無茶な質問かもしれませんが、お知恵をお貸しください。
600 :
nobodyさん :2012/04/10(火) 23:57:20.54 ID:iJ/RABPu
変数的なものは、 SetEnvIf で環境変数(もどき)を定義して RewriteCond で判定に利用できるくらいだろうか。 一部置き換えたルールを大量に定義したいだけなら 生成スクリプト書いて、出来たファイルを Include してくれたまい。
Includeは.htaccessでは使えないw 時代はmod_luaらしいよね。
602 :
nobodyさん :2012/04/14(土) 05:09:10.35 ID:NtMs3Bnh
さくらのレンタルサーバーを使っています。 下記がhtaccessの内容です。置いてるところはwwwフォルダです。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [QSA,L] </IfModule> 自分のテストサーバーではちゃんと動くんですが、サクラにアップすると動きません。 思い当たるのは、リクエストが*.htmlというファイル名になっている所です。 どういう設定にすれば*.htmlの部分を引数としてスクリプトに渡すようになるんでしょうか?
>>602 「動きません」の内容をもう少し詳しく詳しく。
Internal Server Errorが出るのか、404なのか、何か他のエラーが出ているのか・違うエラーならどんな内容か。
604 :
nobodyさん :2012/04/16(月) 16:18:16.12 ID:7ICgM6JQ
>>603 Firefoxだとこのリンクは無効ですとでます。
ChromeだとNo input file specified.とでます。
FirefoxのUrlの文字列が、一瞬長く見えるのでもしかするとUrlが2重になってるのかもしれません。
その辺は一瞬すぎて確認ができませんでした。
エラーログは真っ白だったので、多分転送先のURLが無効なんだと思います。
RewriteRule ^(.*)$ index.php/$1 [QSA,L]
を
RewriteRule ^(.*)$ index.php?param=$1 [QSA,L]
としたら一応リクエストは来たので、最後の/が問題なのかなぁとおもっています。
>>604 php.iniを置いてcgi.fix_pathinfo = 1と1行書いてみたらどうでしょう
>>604 もちろん
No input file specified.
でぐぐって対策くらいはした上で・・・
質問してるんだよ・・・な・・・え・・・?
・・・何もしていない・・・だと・・・
608 :
nobodyさん :2012/04/24(火) 20:09:32.17 ID:WxPv1Uxg
.* をより限定的に書けないの?
609 :
607 :2012/04/24(火) 21:05:23.21 ID:???
mod_rewriteの設定をhttpd.confに書いた場合は効くんですが.htaccessに書いた場合に効きません ,htaccessの他の設定は効いています httpd.confには下記のように記述してます <Directory /> Options FollowSymLinks AllowOverride All </Directory> 他にチェックするところは何がありますか?
611 :
nobodyさん :2012/05/03(木) 13:46:06.81 ID:Qb5luKLf
何はともあれログ出力を指示して、効いてないのか、 効いてるけど意図通りになってないのかを判別するのが先だと思う。 Contextは…っと、RewriteRuleは.htaccessに書けるな。 RewriteEngine On はバーチャルホストごとに独立らしいけど、 .htaccessにも書く必要あるんだっけ?
612 :
nobodyさん :2012/05/23(水) 13:22:20.82 ID:Pir5lqDt
\? でだめかな
Redirect系は?以下を対象にしなかったような。
615 :
nobodyさん :2012/05/30(水) 18:05:49.22 ID:Hgpoe6fE
だからRedirect系は?以下が対象にならないんだって。 で、RewriteはCondでQUERY_STRINGに()を使って拾って Ruleで%1などを使って展開させる。
617 :
nobodyさん :2012/06/06(水) 09:09:10.89 ID:wVcnLYsG
618 :
nobodyさん :2012/06/06(水) 20:29:59.74 ID:nyX+e36y
試してない。 [N] を使って、書き換え後にもう一度リライト処理を通すときも エスケープされるんだろうか。 RewriteCond %{REQUEST_URI} !^/search¥.php RewriteRule ^/([^/]+)/$ /search.php?q=$1 [N]
RewriteRule ^(.+)$ ?$1 [L] をしてるのですが、%xxが勝手にデコードされるのを止める方法はないでしょうか? 記号と記号をエンコードしたものを区別して取得したいのです。 ブラウザ等ではデコードした状態で見せたいので、2重にエンコードするのはなしで
620 :
nobodyさん :2012/06/26(火) 15:16:34.71 ID:NFvhTAKJ
Windows版Apache+mod_rewriteで、URLに「:」が使えない問題 ってまだ解決法ないのかね?
どのRFCですか? たくさんあるので、読んだものもあれば 読んでないものもあるので、 答えられれません。
>>621 がRFC読めって落ちだろうな
ワクワクw
>>622 読んでないものばかりですね
わかります
相変わらず…何もわかっていない…
何でアホのくせに偉そうなんだろう・・・
脳みそが足りないからじゃね?
mod_rewriteよか、したのサーバーでリバースプロキシだろ
633 :
nobodyさん :2012/08/07(火) 13:24:36.49 ID:YRcNWMi3
さくらのレンタルサーバーを使っているのですが RewriteRule (.+)/([0-9]+)$ $1.php?id=$2 [L] や RewriteRule a/([0-9]+)$ a.php?id=$1 [L] などの用に書き換え先と書き換え後に同じ文字があると404エラーになってしまいます。 RewriteRule a/([0-9]+)$ b.php?id=$1 [L] なら動くのですが・・・。 どうすれば同じ文字を使い書き換えすることができるんでしょうか・・・?
御存知の方教えてください。
mod_rewriteで呼び出すnph-cgiのボディに余計なヘッダ文字列が出力されます。
ヘッダには意図した文字列が出力されます。
まさにこのスレの
>>76 >>286 と同じ症状なんですが回避策ありませんでしょうか?
636 :
nobodyさん :2012/10/29(月) 20:46:56.05 ID:jAMWqNZ2
質問させてください
現在Apacheのバーチャルホスト機能を利用しています
■VirtualHostの設定はこのようになっています(DocumentRootは同じ)
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /home/hoge/public_html
</VirtualHost>
<VirtualHost *:80>
ServerName www.example2.com
DocumentRoot /home/hoge/public_html
</VirtualHost>
■やりたいこと
1)
http://www.example.com/hoge/でアクセスがあった場合 /home/hoge/public_html/index.php?id=hogeを表示したい。
RewriteRule ^([a-z0-9_-]+)/$ /home/hoge/public_html/index.php?id=$1 [L]
2)
http://www.example2.comでアクセスがあった場合 /home/hoge/public_html/index.php?id=hogeを表示したい。
RewriteRule ^$ /home/hoge/public_html/index.php?id=hoge [L]
つまり、異なるドメインで同じページを表示したいのです。
このRewriteRuleを両方書いても最初に書いたルールしか適用されません。
オプションが問題なのでしょうか?よろしくお願いします。
全部貼って
638 :
nobodyさん :2012/10/29(月) 22:36:47.55 ID:jAMWqNZ2
>>637 はい。レスありがとうございます。
設定は全部でこのようになっています。
RewriteEngine on
# 1) www.example.com用
RewriteRule ^([a-z0-9_-]+)/$ /home/hoge/public_html/index.php?id=$1 [L]
RewriteRule ^([a-z0-9_-]+)/([a-z]+)/$ /home/hoge/public_html/$2.php?id=$1 [L]
# 2) www.example2.com用
RewriteRule ^$ /home/hoge/public_html/index.php?id=hoge [L]
RewriteRule ^([a-z]+)/$ /home/hoge/public_html/$1.php?id=hoge [L]
1)は、
http://www.example.com/hoge/でアクセスが会った場合 、id=hogeになるようにしています。これを
2)で、
http://www.example2.comでアクセスがあった場合 、id=hogeになるような設定にしたいと思っています。
id=hogeは当然設定に記入する必要がありますよね。そしてアクセスがあった場合両方のドメインで同じようになるようにしたいのです。
よろしくお願いします。
丁寧な質問者に対してこんなこと言うのはほんと心苦しいんだけど、頼むから全部貼って
彼はなぜ全部じゃないと思ったのだろう?
640はなぜ全部だと思ったのだろう?
643 :
nobodyさん :2013/03/26(火) 06:58:48.63 ID:4K2kYRPh
>>642 baseでggrks mod_rewrite関係ねえから
644 :
nobodyさん :2013/05/02(木) 20:24:29.83 ID:bOBKpt7I
ちょっと質問させてください apache2.2から2.4への移行作業をしていて気づいたのですが 2.2のときはトップページへのアクセスを RewriteRule ^$ /foo.php としてリライトしてたのですが 2.4ではこの条件に該当しなくなってしまいました。 いろいろ試行錯誤したところ RewriteRule ^(index\.html)?$ /foo.php と書くとOKということが分かりました。 RewriteRule ^index\.html$ /foo.php はNGでした。 回避策は分かったのですがなんだか気持ち悪いので質問してみました。 これは仕様が変わったのでしょうか?
645 :
nobodyさん :2013/05/08(水) 17:17:31.74 ID:lLEBkj6z
646 :
645 :2013/05/08(水) 18:14:47.04 ID:???
mod_proxyが、無いとダメっぽいですね。 サーバーには、入ってませんでした (つд⊂)エーン
Rが付くとデフォルトでは301を使ってリダイレクトする。
649 :
645 :2013/05/11(土) 17:44:12.77 ID:???
メインのwww.〜のサーバーが仕様が古くて、使いたいプログラムが動かないだわ。 パクリサイトの手口もそうやるんだろうけどさ。
650 :
645 :2013/05/11(土) 17:45:21.64 ID:???
自己解決しました。もういいです。
さくらサーバーリダイレクト301で
初期ドメイン から 独自ドメインに転送したいのでうまくいきません
RewriteEngine on
RewriteCond %{HTTP_HOST} ****?.sakura?.ne?.jp [NC]
RewriteRule .*
http://www.*******.jp%{REQUEST_URI} [L,R=301]
Internal Server Errorが出てしまい
さくらのエラーログを見ると
/home/アカウント/www/.htaccess: Invalid command '\xef\xbb\xbfDirectoryIndex', perhaps mis-spelled or defined by a module not included in the server configuration
ログにあるようにwww配下に.htaccessを置いています
訳すとスペルミスかモジュールがないと言う事ですが
さくらサーバーは公式でmod_rewriteを利用できるみたいですし
記述が間違っていうのでしょうか
どうかよろしくお願いいたします。
DirectoryIndexの手前に全角スペースとか付いてね?
653 :
nobodyさん :2013/11/29(金) 07:40:27.72 ID:x026Ok3v
>>651 >\xef\xbb\xbf
とりあえず、UTF-8のBOMだな、これ。
付かないように保存してみたら?
654 :
nobodyさん :2013/11/29(金) 09:56:58.90 ID:qgN1e/+l
メモ帳でやるとそういうことが起きるだよ
Apache の .htaccess の設定について質問させてください。 特定のファイルへアクセスがあった場合には、そのファイルだけリダイレクトをかけたいです。 具体的には、 contact.html にアクセスが来た場合には、 contact.php ファイルに飛ばしたいと考えています。 どういうコードを書けば全ファイルでは無く、特定のファイルに対して.modrewriteを使えますか?
普通に RewriteRule (.*)/contact.html$ $1/contact.php [R=301,L] とかそんなんでいいんじゃないの
>>656 ありがとうございます!
このスレが過疎過ぎて誰も見てくれていないんじゃないかと思ってましたw
質問スレでもない特定のモノ向けのスレだからな、過疎るのはしょうがない 何か特別話題があるわけでもないし とはいえ見てる人は見てるだろう、俺も専ブラのブックマークしてチェックはしてるし 一見過疎ってても案外すぐレスが付くところは珍しくは無い
リライトそのものはオワコン化しつつあるし、
>>655 程度ならRedirectMatchで十分だろと思いつつ
にやにやしながら読んでるしw
>>659 そんな方法もあったのね。
オワコンってまじでっか?
661 :
sage :2014/04/06(日) 15:02:01.73 ID:TmvJ2Q7/
質問させて下さい。
http://sample.co.jp/xxx/ にアクセスしたときに
http://sample.co.jp/xxx.php を表示したくて、.htaccessに
RewriteEngine on
RewriteOptions MaxRedirects=1
RewriteBase /
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9a-zA-Z_\-]+)/$ $1\.php [L,R]
と書いたのですが、正常に動作してくれません。
どこが間違っているか教えて下さい。
662 :
nobodyさん :2014/10/21(火) 18:02:28.17 ID:no1UJMbX
マッチしてるか調べたい文字列が base64でエンコードされているのですが これをデコードしてからマッチさせるところまで 全部正規表現で記述出来ますか?
933 名前:デフォルトの名無しさん[sage] 投稿日:2014/10/21(火) 13:15:50.92 ID:QuOrKhyR マッチしてるか調べたい文字列が base64でエンコードされているのですが これをデコードしてからマッチさせるところまで 全部正規表現で記述出来ますか?
.htaccessに書いた内容が思ったように動かないとき、 動作を確認する方法はあるのでしょうか?
665 :
nobodyさん :2014/10/28(火) 02:51:50.21 ID:BSkYbeSW
ログ吐かせろよハゲ
666 :
664 :2014/10/28(火) 21:04:34.73 ID:???
>>665 ハゲはお前だろ。
ていうか、ありがとうございます。
ログってApacheのログですか?
まあ、落ち着いてマニュアル当たれれ
668 :
nobodyさん :2014/10/29(水) 00:14:35.16 ID:TJ2Xvz38
665だけど1万本くらいてめえにくれてやりたいくらい多すぎて鬱陶しいレベルでふさふさだぞ りらいとろぐでggrks
669 :
664 :2014/10/29(水) 05:50:09.96 ID:???
>>668 1万本もないくせによく言うわツルッパゲのカス野郎。
っていうか、ありがとうございます。
リライトログでぐぐってみます。
rewritelog って RewriteCond でスキップされるケースでも 全部ログに残ってしまうみたいだけど スキップしたときのログを残さないのは無理? Level 1 だとスキップしたものも記録される Level 0 だと全部消える
671 :
nobodyさん :2014/11/07(金) 15:24:41.12 ID:aXYLSPgq
誘導されて来ました。 リクエストヘッダで 'Cookie' => 'PHPSESSID=fadkcau6mnmq1ul6jo5pvngqlahd2hoge', と送られてくるべきものが、ブラウザのバグで 'Cookie' => ', PHPSESSID=fadkcau6mnmq1ul6jo5pvngqlahd2hoge', と送られてきてるんだけど、これ apache 側でphpに食わすまえに置換できないかな。 mod_headers の RequestHeader は置換できないみたいだし、いい方法ある?
そのまま放置してバグったブラウザをいつまでも使ってんじゃねーよとするw
判らないならレスしないでください うざいだけです
PHP側でやるべきことだな
675 :
nobodyさん :
2014/11/10(月) 14:14:41.86 ID:yg9Z7Cjj ぺちぱーの時点で知的障害者だからな