0

___test次のようなディレクトリを使用し/___test/subdirectory1/ていくつかのコンテンツを持ちたいのですが、このパスを URL に表示しないでください。代わりに、URL/demo/subdirectory1または言うと、ブラウザのURL/demo/subdirectory1/images/image.jpgを指して/___test/subdirectory1/images/image.jpg、ブラウザのURLを次のようにしたいと思います/demo/subdirectory1/images/image.jpg。実際に交換___testするdemo

時々動作するように見えますが、さまざまな問題で試したことは次のとおりです。

RewriteRule ^demo/subdirectory1(.*) ___test/subdirectory1/$1

上記は: demo/subdirectory1または demo/subdirectory1/(既存のコンテンツの例では index.html 内/___test/subdirectory1/) でのみ機能しdemo/subdirectory1/somethingmore...ますが、この場合もコンテンツは存在しますが、残念ながら URL に実際のディレクトリ パスが表示されます。

さらに、私は以下を使用して、404 から/___testURL で始まるものまでを使用しています。

RewriteCond %{THE_REQUEST} ^GET\ /___test/
RewriteRule ^___test/(.*) - [R=404,L,NC]

それは機能しますが、これを追加すると、残念ながら(再び)前のものも404になります。しかし、私にとって最も重要なことは、たとえ 2 番目の作品を作成できなくても、最初の部分を適切に作成することです。

どんな助けでも本当に感謝しています。ありがとう。

編集1:私はまた、内部に以下を追加しようとしました/___test/subdirectory1/.htaccess

Options +FollowSymLinks
RewriteEngine On
RewriteBase /___test/subdirectory1

失敗。

編集 2: うまく動作しませんが、Jon Lin の助けを借りてこれまでに思いついた最高のものは次のとおりです。

RewriteCond %{REQUEST_URI} ^/demo/subdirectory1(.*)
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d
RewriteRule ^ /___test/subdirectory1/%1 [L]

/demo/subdirectory1<-OK

/demo/subdirectory1/<-OK

/demo/subdirectory1/subdirectory2<- 実際のパスを公開

/demo/subdirectory1/subdirectory2/<-OK

/demo/subdirectory1/subdirectory2/subdirectory3<- 実際のパスを公開

/demo/subdirectory1/subdirectory2/subdirectory3/<-OK

ご覧のとおり、より深いレベルsubdirectory1に問題があります。理由がわかりません。Linux apache のサイトのルートに存在するクリーンな .htaccess ファイル (他に深いものはありません) でこれをテストします。

4

1 に答える 1

0

ほとんどの場合、あなたは正しい方向に進んでいますが、__testディレクトリが公開されないように、いくつかのチェックを追加する必要があるかもしれません。

RewriteEngine On

# prevent mod_dir from redirecting to trailing slash
RewriteCond %{REQUEST_URI} ^/demo/subdirectory1/(.*[^/])
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d    
RewriteRule ^ /demo/subdirectory1/%1/ [L,R=301]

RewriteCond %{REQUEST_URI} ^/demo/subdirectory1$
RewriteRule ^ /demo/subdirectory1/ [L,R=301]


# check if the file actually exists first
RewriteCond %{REQUEST_URI} ^/demo/subdirectory1/(.*)
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -f [OR]
RewriteCond %{DOCUMENT_ROOT}/___test/subdirectory1/%1 -d

# and rewrite only if the resource exists within ___test
RewriteRule ^ /___test/subdirectory1/%1 [L]

を使用して、現在の反復で書き換えが終了したことを確認します[L]

404ルールは機能するはずですが、mod_dirが___testディレクトリをリダイレクトして公開しようとしないように、末尾のスラッシュを削除する必要があります。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /___test
RewriteRule ^ - [R=404,L,NC]
于 2012-10-02T01:24:28.340 に答える