2010-12-02 9 views
1

私は奇妙なapache mod_rewriteの問題があります。ユーザーからサブディレクトリを隠す必要がありますが、すべての要求をそのサブディレクトリにリダイレクトする必要があります。私はstackoverflowに関するいくつかの非常に似た問題を発見しましたが、実際には何も合わないので、私は新しい質問を投稿することにしました。フォルダを隠すルールを書き直し、後ろにスラッシュを入れずに正しく機能しない

私の.htaccessファイルは次のようになります。

 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 
RewriteRule ^(.*)?$ foo/$1 [QSA,L] 

ドキュメントルートは次のフォルダ/ファイルが含まれています。

/foo/bar/index.html

私は今、そのexample.com/barと例を期待します。 com/bar /はindex.htmlの内容を表示します。予想通り

代わりexample.com/bar/私のコンテンツを示すがexample.com/bar内容を示し、次いでexample.com/bar/foo/ 301を私にリダイレクトします。私は本当にこの場合301リダイレクトがあるのをなぜ知りません。

私はそのルールの上にこの

 
RewriteCond %{REQUEST_URI} !^[^.]*/$ 
RewriteCond %{REQUEST_URI} !^[^.]*\.html$ 
RewriteCond %{REQUEST_URI} !^[^.]*\.php$ 
RewriteRule ^(.*)$ $1/ [QSA,L] 

何かを置く場合は、それが動作しているようですが、それはすべての使用されるファイルの拡張子をリストに私を必要とする...

他の方法私はありますリダイレクトを省略することができますが、フォルダ "bar"は外部ユーザーには見えません。

ありがとうございます!

答えて

0

より良い...

は上で持っていないすべてのURLに/追加し、簡単なのRewriteRuleと協力し、それを手に入れました。

# only directories 
RewriteCond %{REQUEST_FILENAME} !-f 
# exclude there directories 
RewriteCond %{REQUEST_URI} !^/excluded-dirs 
# exclude these extensions 
RewriteCond %{REQUEST_URI} !\.excluded-extension$ 
# exclude request that already have a/
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ /$1/ [R=301,L] 
+0

'^(。*)/?$'は後続のスラッシュを任意にするFYI – zanderwar

0

1回目の書き換えルールは、/ foo /(。)から($ 1)、2番目から(。)から$ 1にリダイレクトされます。

だけのアイデア、これはテストされていません。決してより遅く

関連する問題