09/01/21 16:33:47
.htaccessより上の階層のファイルを参照させたいのですが可能でしょうか?
RewriteEngine on
RewriteRule (.+?)\.php$ ../test/$1.php [L]
355:nobodyさん
09/01/21 19:59:03
やってみたの?
356:351
09/01/23 03:43:10
>>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さん助かりました。
本当にありがとうございました。
357:nobodyさん
09/01/26 15:02:16
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のように振舞わせる方法をご存知でしたら
ご教授よろしくお願いします。。
358:nobodyさん
09/01/27 12:01:00
htmlの中にかかれたCSSファイルなどはすべて絶対パスになってます?
359:357
09/01/27 16:06:45
はい、なっています。
Apacheのerror_logを見ると、
file does not exist: /DocRoot/css
file does not exist: /DocRoot/images
というエラーログが吐き出されてます。
今回アクセスしてほしいのは
/DocRoot/subDir1/css
/DocRoot/subDir1/images
なので、RewriteRuleが効いていないのかな、といった状態です。
360:nobodyさん
09/01/27 17:46:36
/DocRoot/.htaccess 該当部分見せてください
361:357
09/01/28 12:47:01
/DocRoot/.htaccessは
RewriteBase /
のみです。
こまごまと指定しているRewriteRuleは
/DocRoot/subDir1/.htaccess になります
Options +FollowSymLinks
RewriteEngine On
RewriteBase /subDir1
RewriteCond %{HTTP_REFERER} URLリンク(hogehoge.com)(.*)$
RewriteRule (.*) /subDir1/$1 [R,L]
RewriteRule ^$ /subDir1/foo.html [R,L]
RewriteRule ^foo\.html$ /subDir1/bar.php?str=hoge [L]
こんな感じです。
362:nobodyさん
09/01/28 13:52:14
DocRootへのアクセスをどうにかしたいんですよね?
/DocRoot/css -> /DocRoot/subDir1/css
なら、DocRootの .htaccess に書かないと
/subDir1/xxx -> /subDir1/bar.php?str=xxx のときの bar.phpのcssファイルへのリンクが /css だとしたら、
/.htaccess にその振り分けを。
そのときに subDir1 なのか subDir2 なのかを振り分けなくてはいけないですが
URLにsubDir1が含まれていそうなので なんとかなるかな。
363:nobodyさん
09/01/28 14:04:18
訂正。 入って無いんだった。
これは難しいのかな。
ブラウザからのアクセスは
URL欄は URLリンク(hogehoge.com) でも cssファイルへのアクセスは
URLリンク(hogehoge.com) でしかないからね。
364:nobodyさん
09/01/28 14:53:05
mod_rewriteじゃなくて、Aliasで十分なんじゃないの?
365:357
09/01/29 14:23:59
Aliasを試しましたところ、>>363の現象は回避できましたが
複数のサブディレクトリ毎にAliasを設定できないので断念しました。。
結局htmlにbaseタグをつけ全て相対パス表記にして、
jsのほうはdocument.baseURI要素を見てリクエストURIに追加する方法をとることにしました。
いろいろ勉強になりました。ありがとうございます。
366:nobodyさん
09/02/01 21:14:36 xTHPhmiR
public_html/index.phpにアクセスされたらindex_new.phpに移動させたいのですが
うまく動きません
どなたかご教授お願いいたします
RewriteEngine on
RewriteRule .index.php$ /index_new.php [R=301,L]
RewriteEngine off
367:nobodyさん
09/02/02 10:49:03
/.index.phpへのアクセスで動いてる?
368:nobodyさん
09/03/02 05:54:17 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
多分、?のエスケープがうまくいってないようなんですが、どうしたもんでしょうか。
369:nobodyさん
09/03/02 05:55:14
普通逆じゃないか?
370:nobodyさん
09/03/02 07:05:46 Xc+NjhEh
事情があって、もとがベタベタPHPだったんだけど
今回FWかまして作り直すことになって、
でもSEOとかブックマーク入れてる人とかを考慮するために、
URLは元と同じじゃないと駄目だからってことになって、
やむにやまれずこんな方法でやるしかないかなと。
FWのコントローラ側をいじってもなんとかできることはできるんだけど、
今後のセキュリティアップデート考えるとFW自体はいじりたくないので。
371:nobodyさん
09/03/03 04:43:10
色々やってはみたもののどうも無理そうなのでFWのルータいじります
rewriteって特殊文字のエスケープ周り甘いのかなぁ
372:nobodyさん
09/03/03 10:28:42
RewriteCond %{QUERY_STRING} ^param=(.*)$
RewriteRule ^hoge\.php$ ./hage/param/%1? [R]
試して無いが
373:nobodyさん
09/03/27 14:47:48
すみませんが、質問です。
CakePHPを使っているのですが、あるアプリケーションで、フロントコントロー
ラであるindex.phpを、一般画面用と管理画面用との2つ用意したいのです。
www(ドキュメントルート)
|
+ index.php(1. 一般画面用)
|
+ admin
|
+ index.php(2. 管理画面用)
そして、http://ドメイン名/admin/... となったリクエストだけ、2.の管理画
面用index.phpに渡すようにしたいのです。
http://ドメイン名/hoge → index.php?hoge (1.の一般画面用)
http://ドメイン名/hoge/fuga → index.php?hoge/fuga (1. の一般画面用)
http://ドメイン名/admin/hoge → index.php?hoge (2. の管理画面用)
http://ドメイン名/admin/hoge/fuga → index.php?hoge/fuga (2. の管理画面用)
このように指定するには、.htaccessにどのように指定したらよいでしょうか?
374:nobodyさん
09/04/03 13:14:38 nlrPhi8T
URLリンク(hogehoge.ero) => 404error!
URLリンク(hogehoge.ero) => 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