4

誰かが.htaccessの最適化を手伝ってもらえますか?実際に私は次のコードを持っています:

RewriteEngine on
RewriteBase /
DirectoryIndex frontend/www/index.php

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} cpanel/(.*)$
# Why not "-f" - because it's domain of 3d level: VirtualDocumentRoot /path/to/htdocs/%-3/ and if I use "-f" file not founds :(
RewriteCond backend/www/%1 -F
RewriteRule . backend/www/%1 [L]

RewriteCond %{REQUEST_URI} cpanel/(.*)$
RewriteCond backend/www/%1 !-F
RewriteRule . backend/www/index.php?b=%1 [L]

RewriteCond %{REQUEST_URI} !cpanel/(.*)$
RewriteCond frontend/www%{REQUEST_URI} -F
RewriteRule . frontend/www%{REQUEST_URI}

RewriteCond %{REQUEST_URI} !cpanel/(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . frontend/www/index.php?f=%{REQUEST_URI}

フォルダー構造:

.
├── .htaccess (with code I provided)
├── frontend
│   ├── www
│       ├── css
│       │   ├── base.css
│       └── index.php
├── backend
    ├── www
        ├── css
        │   ├── base.css
        └── index.php

私は欲しい:

  • my.domain.com/base.cssは、ファイルがルートディレクトリまたはfrontend/wwwの下に存在する場合にファイルを表示します
  • my.domain.com/dir/base.cssは、ファイルがroot/dirディレクトリまたはfrontend/www/dirの下にある場合にファイルを表示します
  • my.domain.com/cpanel/base.cssは、ファイルがバックエンド/wwwディレクトリに存在する場合にファイルを表示します
  • my.domain.com/cpanel/dir/base.cssは、ファイルがbackend / www/dirディレクトリに存在する場合にファイルを表示します
  • neddedディレクトリのいずれにもファイルが見つからない場合は、frontend / www/index.phpまたはbackend/www / index.phpからのindex.phpを表示します(URIがcpanel / ...で始まる場合)。

私の.htaccessはうまく機能しているように見えますが、品質がわかりません。

4

1 に答える 1

3

httpd.conf正しく設定されていれば、これRewriteBase /は不要です

RewriteCond %{REQUEST_URI} cpanel/(.*)$部分的にcpanel/(.*)$する必要があります^cpanel/(.*)$。これがないと、「.. cpanel/something..」を含むすべてのURLが一致します。

...?f=%{REQUEST_URI}クライアントがindex.phpに要求したURLを渡したいと思います(おそらく404-sをログに記録するため)。ただし、REQUEST_URI不要な文字(例&)が含まれている場合は、予期しない動作が発生します。たとえば、まで&の部分のみがパラメーターREQUEST_URIの値として渡され、その後の部分は、新しく作成された別のGETパラメーターになります。(試してみてください。)f&

REQUEST_URIphpを使用して(オリジナル)を取得できます$_SERVER['REQUEST_URI']。この部分を省略.htaccessすると、より明確になります。

最後の2つのルールはフラグに値しますが、[L]重要ではありませんが、ルールを連鎖させたくない場合は、セキュリティと保守性のために、[L]フラグを追加することをお勧めします。

これらの小さなことを除いて、あなたの.htaccessは大丈夫だと思います。

于 2012-11-19T02:52:38.643 に答える