-1

次の URL があります: myweb.com/products
ホストに「products」というディレクトリがあります。

上記の URL を入力すると、myweb.com/products/ にリダイレクトされ、ディレクトリ内のファイルが一覧表示されます。
名前でディレクトリを検索する代わりに、その名前のファイルを見つけようとしますか?

そのため、myweb.com/products と入力すると、products という名前のファイルが検索され、見つからない場合は 403 ページに送信されます。

※一例です。私はより多くのディレクトリを持っています。

編集:
たぶん、私は自分自身を十分に説明していませんでした.
次の RewriteRule があります

RewriteRule ^(.*).php redirect.php [L,QSA]


製品はフォルダーであるため、すべてをredirect.phpにリダイレクトしますが、redirect.phpにリダイレクトしません。それが問題です..

4

2 に答える 2

2

この名前のディレクトリがある場合、apache はその名前のファイルを見つけることができません。

ディレクトリのリストをオフにするには、Optionsディレクティブを使用します

Options -Indexes

これにより、ディレクトリの内容が一覧表示されなくなります。ただし、エラー メッセージは 404 ページではなく、403 Forbidden です。

さらに、インデックスファイルのルックアップを無効にする必要があります。

DirectoryIndex disabled

それ以外の場合、Apache は index.html、index.php、... ファイルが存在する場合はそれを表示します。

ディレクトリの末尾にスラッシュが追加されないようにするには、次を使用します。

DirectorySlash off

同じ名前で追加されたファイルに書き換えるには、.phpこれを使用できますRewriteRule

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.+)/ $1.php

これは、要求されたパスがディレクトリであるかどうかを調べ、そうである場合は、同じ名前と.php拡張子を持つ通常のファイルもチェックします。両方が true の場合、PHP ファイルに書き換えます。

単なる書き換えではなくリダイレ​​クトが必要な場合は、Rフラグを RewriteRule に追加する必要があります

RewriteRule (.+)/ $1.php [R,L]

redirect.phpの代わりに書き換える必要がある場合はproduct.php、使用します

RewriteRule (.+)/ redirect.php

すべてをまとめると、これは単純化された

DirectorySlash off

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ redirect.php [L]
于 2013-03-09T20:51:09.047 に答える
0

myweb.com/products に index.php を記述して、目的の名前を除外すると思います。

于 2013-03-09T20:40:18.600 に答える