2012-03-09 16 views
1

私は45分、運が無かった。私は同様の質問を見つけましたが、私の状況/問題に完全に対処するものはありません。内部リダイレクト後にPATH_INFOの動作が停止しますか?

私は2つのことを行う書き直しをしようとしています:1)きれいなURLを作成します(index.phpを削除します)2)ディレクトリを非表示にします(私のアプリケーションはweb_root/dirにありますが、domain.com /)3)$ _SERVER( 'PATH_INFO')は変更されません。

などです。私がすべき

RewriteBase /dir/ 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/dir.*$ 
# if I change the [L] to an [R], it all works 
# but it obviously "dirties" my desired clean URL 
RewriteRule ^(.*)$ /dir/index.php/$1 [L] 

# not sure why I need this 
RewriteRule ^/?$ /dir/ 

::これは私がこれまで持っているものである

www.mydomain.com/dir/index.php/some/path 

:内部的に

www.mydomain.com/some/path 

はに書き換え:私はしたい私の大学でのプロキシがありますが、私はその問題の原因とは思わない。

PHP 5.3およびFastCGI

PATH_INFOが内部リダイレクトで作業を維持するための秘訣は何を使用していますか?

答えて

0

Hmmm!後続パスのもの。

このパス情報は書き換えに失われていますか?

www.mydomain.com/some/path - >www.mydomain.com/dir/index.php/some/pathディレクトリごとのコンテキストではなく、VirtualHostのようなサーバーのURL処理の初期段階で書き直してみましたか?

私は、その時点でどの部分が物理的なパスであり、後続のジャンクであるのかわからないため、URLの上で実行するとパス情報が失われないと考えています。このURLはファイルにマップされていません。あなたが生産する場合

ヘック、どのようにシンプルにAlias?エイリアスは、抽象URLの場所をアプリケーション用のファイルシステムの具体的な場所にマップするためによく使用されます。私はそれらの全体の束を持っています。ここで一つです:人々はwww.kylheku.com/cgit/txrにアクセスすると、それはwww.kylheku.com/cgit/cgit.cgi/txrに内部的にリダイレクト

Alias /cgit/txr /cgit/cgit.cgi/txr 

。そのURLも正常に動作しますが、前者は文字列cgiの3つの繰り返しを持たないため、より良いものになります。

言うまでもなく、エイリアスはURLの末尾のものを失うことはありません。

+0

これは私に「エイリアス」の再調査を促し、何か「きちんとした」ものを見つけました。 '/ cgit/cgit/cgit.cgi/txr'(リポジトリ固有であり、いくつかの方法でそうしている)を'/cgit/cgit/cgit.cgi'に '/ cgit /'をエイリアスするのではなく、 'Alias/cgit/txr/cgit.cgi/txr' '/ cgit/cgit.css'にスタイルシートがあり、それもまた書き直されて見つからないということです。しかし、以前の 'Alias /cgit/cgit.css/cgit/cgit.css'を使って修正することができます!エイリアス拡張のためにエイリアスは再検査されません。したがって、エイリアスにマップするものはそのままです。それを知らなかった!だから、cgitのための2つの簡単なルール。 – Kaz

+0

Kaz、素晴らしいアイデアだが、エイリアスが、私のニーズに完全に合っていない。私は/にいくつかのものを残したいが、/ dirにファイルにマップされていないものは書き直したい(そこにはメインのサイトがあるので、別のファイルとは別に保存したいドキュメントルート。他のアイデア? – pocketfullofcheese