これが単純な「はい」または「いいえ」の答えであることを願っています(理由を明記してください)
Q1:ルールがhtaccessに配置される順序は重要ですか?それらは完全に分離されたアイテムであるため、たとえば、
Q2:はいの場合、htaccesエンジンを高速化し、不必要なルールでオーバーロードしないようにするために、正しい順序を適用していますか??
Q3:ここで無効化/追加するものに関するヒントは、大歓迎です+1!
# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /
#####################################################
<IfModule mod_headers.c>
ExpiresActive On
ExpiresDefault M172800
Header unset ETag
FileETag None
Header unset Pragma
##### STATIC FILES
<FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
ExpiresDefault M1209600
Header set Cache-Control "public, max-age=1209600"
</FilesMatch>
##### DYNAMIC PAGES
<FilesMatch "\\.(php)$">
ExpiresDefault M604800
Header set Cache-Control "public, max-age=604800"
</FilesMatch>
</IfModule>
#####################################################
# /page123 and /page123/ will all go to /page123.php
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
####################################################
# NO WWW http://www. becomes always http://
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
##############################################################
# add own extensions that will be interpreted as php
AddType application/x-httpd-php .php
AddType image/svg+xml svg svgz
AddType text/css css
AddType text/javascript js
AddEncoding gzip svgz
##############################################################
ErrorDocument 500 /
ErrorDocument 404 /
まあ、.htaccessファイルは通常のApache構成ファイルと同じ形式を使用するため、同じルールが適用されます。
ほとんどの構成設定は順序に依存しませんが、一部は依存します-設定に依存します。
RewriteRule
およびRewriteCond
例:順序に敏感なので、その場合の答えはYESです。
たとえば、.
http://wiki.Apache.org/httpd/RewriteRule
これらが評価される順序の説明については。
それは問題である。 RewriteRuleのドキュメント からの引用:
これらのルールが定義される順序は重要です-これは、実行時に適用される順序です。
たとえば、<files>
と<Rewrite>
の順序がパフォーマンスにどのように影響するかについては説明できません。私はそれを自分で見つけようとしています。これに関する情報を見つけることができなかったので、おそらくそれは問題ではありませんか?
ただし、Rewrite
とRedirect
(およびRedirectMatch
)の間では、実行順序mayが記載されている順序ですが、それは多くの場合、人々が期待するものです。
具体的には、mod_rewrite
およびmod_alias
モジュールは、独立して処理され、実行されますthatの順序。
Rewrite
)が(リストされている順に)実行されます。Redirect
およびRedirectMatch
)は次の順序で実行されますtheyはファイルにリストされています。したがって、Redirect
がRewrite
を続行しても、リダイレクトは処理されますafterすべての書き換えが処理されました。
リダイレクトと書き換えの両方がある場合にファイルを「読み取り可能」に保つ1つの方法は、mod_alias
モジュールをまったく使用しないことです。代わりに、mod_rewrite
のみを使用してください。 [R]フラグによる書き換えは、本質的にそれを書き換えに変えます。
このウェブマスターの回答 はその方法を示しています。
これで、すべてのディレクティブがファイルに表示される順序で実行されるため、実行順序について厄介な驚きや混乱はありません。または、couldすべてのRedirect
およびRedirectMatch
ディレクティブをファイルの「下部」に物理的に再配置し、それらが実行されないことを思い出させるとにかくRewrite
sの後まで。
この時点で啓発されたいくつかの優れたStackExchangeの回答を次に示します。
残りについては、たとえばfiles
sの前または後にrewrite
を置く間のパフォーマンスに関する情報を見つけることができませんでした。私が見つけた唯一のパフォーマンスベースのアドバイスは、サーバー構成ファイルにアクセスできる場合は、できるだけ移動するのが最善であるということですfrom .htaccessファイルto構成ファイル、および.htaccessファイルを完全に無効にします(または.htaccessファイルする必要がありますを読み取る特定のディレクトリを指定します)。
ロジックでは、構成ファイルに配置されたルールは一度だけ読み取る必要があります。 htaccess処理がオンになっている場合、everyリクエストの場合、サーバーのevery(リクエストされたディレクトリ以上)のディレクトリで、htaccessファイルが存在するかどうかを検索する必要があります。存在するかどうか。そして、もしそうなら、一人一人が新たに読まれなければならない。