1

特定のディレクトリの下にある正規のディレクトリ名を PHP ファイルにリダイレクトしたいと考えています。ルート .htaccess で次のようなことができると言っているようなこの回答を見つけました。

RewriteEngine on
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]

これが私が探しているものだと思いますが、次の方法はありますか?

  • ディレクトリのみに制限しますが、ネストされたディレクトリは許可しますか?
  • ディレクトリのみをフィルタリングする: ファイルを処理したくありません。
4

2 に答える 2

2

あなたが探しているのはRewriteCond、条件付きで書き換えルールを適用できる、だと思います。これは何かがディレクトリであるかどうかをチェックします:

RewriteCond %{REQUEST_FILENAME} -d

次のように、上に配置して使用しますRewriteRule

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /([^/]+) processDir.php?dir=$1 [B,QSA]

これは、質問のメソッドまたは回答のいずれかで機能します。注意すべき重要な点は-d、ルールを適用する前に、フラグが最初にリクエストが有効なディレクトリであることを確認することです。これは、あなたが望んでいるように見えます。

私が収集したものからのあなたの質問の2番目の部分は、ネストされたディレクトリについてです。正規表現は、現状では、具体的に1つのディレクトリのみを検索しています(スラッシュはありません)。これを変更したい場合は、次のようにすることができます。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule /?some_dir/(.*) processDir.php?dir=$1 [B,QSA]

これにより、以下の有効なディレクトリが取得some_dirされ、phpファイルにフィードされます。

.htaccess最後に注意すべきことは、これらすべてをルートファイルに入れる必要はないということです。.htaccess書き換えたいディレクトリにファイルを置くことができます。これをどちらの方法でも行うことに大きな違いはありませんが、何をしているのかわからない場合は、構文を少し単純化できることがわかりました。

于 2013-02-19T16:30:02.970 に答える
0

この質問を削除するつもりでしたが、誰かがお気に入りに追加したので、代わりに回答します。

このような .htaccess を使用します

RewriteEngine on
RewriteRule ([^/]*)/$ processDir.php [B,QSA]

その後、get を使用する代わりに、processDir.php でこの変数を使用できます。

<?
dir is <?php
echo $_SERVER["REQUEST_URI"];
?>

私が正規表現に加えた主な変更 (誰かが後で修正する予定) は、スラッシュが文字列の最後にあることを主張することです。

于 2013-02-19T06:32:55.270 に答える