Htaccess'te hangi sipariş kurallarının yerleştirildiği önemli midir?


9

Umarım bu basit bir EVET veya HAYIR cevabıdır (lütfen nedenini belirtin)

S1: Kuralların htaccess'e hangi sırada yerleştirildiği önemli midir? Tamamen ayrılmış öğeler oldukları için: örneğin

S2: Evet ise, doğru siparişi uyguluyorum? htacces motorunu hızlandırmak ve gereksiz kurallarla aşırı yüklememek için?

Q3: burada ne devre dışı bırakmak / eklemek için herhangi bir ipucu jucily welcome +1 vardır!


# 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 /

Yanıtlar:


10

Peki, .htaccess dosyaları normal Apache yapılandırma dosyasıyla aynı biçimi kullanır, bu nedenle aynı kurallar geçerlidir.

Çoğu yapılandırma ayarı sıraya bağlı değildir, ancak bazıları ayara bağlıdır.

RewriteRuleve RewriteCondörneğin sıraya duyarlıdır, bu durumda cevap EVETtir.

Bkz.

http://wiki.apache.org/httpd/RewriteRule

bunların değerlendirilme sırasının açıklaması için.


4

Farkeder. RewriteRule belgelerinden alıntı :

Bu kuralların tanımlanma sırası önemlidir - bu, çalışma zamanında uygulanacakları sıradır.


1
Mod_rewrite içinde önemli - evet. Ancak, OP özellikle mod_rewrite'a yönelik değildir ve OP'nin .htaccessdosyasındaki diğer modüllerden birçok direktif vardır . Kısacası, farklı modüllerden (ve farklı kaplardaki ) yönergeler , yapılandırma dosyasındaki görünür sıralarına bakılmaksızın bağımsız olarak ve önceden tanımlanmış bir sırayla yürütülür.
MrWhite

1

Örneğin, <files>vs sırasının <Rewrite>performansı nasıl etkilediği hakkında konuşamam . Bunu kendim bulmaya çalışıyorum. Bu konuda herhangi bir bilgi bulamadım, bu yüzden önemli değil ??

Ancak, Rewritevs Redirect(ve RedirectMatch) arasında , yürütme sırasının listelenen sırada olmayabilir , ancak genellikle insanların beklediği şey budur.
Özellikle mod_rewriteve mod_aliasmodülleri bağımsız olarak işlenir / yürütülür. bu sipariş.

  1. Tüm mod_rewrite yönergeleri ( Rewrite) yürütülür (listelendikleri sırayla).
  2. SONRA bütün mod_alias direktifler ( Redirectve RedirectMatch) sırayla yürütülür onlar dosyasında listelenir.

Yani, bir dahi Redirectbir ilerler Rewrite, Yönlendirme sadece işlenecektir sonra tüm Yeniden yazımlar işlendikten.

Hem yönlendirmeleriniz hem de yeniden yazmalarınız varsa dosyayı "okunabilir" tutmanın bir yolu, mod_aliasmodülü hiç kullanmamaktır . Bunun yerine yalnızca kullanın mod_rewrite. [R] bayrağıyla yeniden yazmak, esas olarak onu bir yeniden yazmaya dönüştürür.
Bu web yöneticisinin Cevabı nasıl olduğunu gösterir.

Şimdi, tüm direktifler dosyada göründükleri sırayla yürütülecek, bu yüzden yürütme sırası hakkında kötü sürprizler veya karışıklık yok. Alternatif olarak, olabilir fiziksel tüm taşınmaya Redirectve RedirectMatchonlar sonrasına kadar yürütülmez kendinize hatırlatmak için böylece, dosyanın "alt" için direktifler Rewritezaten bu.

İşte bu noktaya ışık tutan bazı iyi StackExchange cevapları:

Geri kalanı için, örneğin s'den filesönce veya sonra yerleştirme arasındaki performans hakkında herhangi bir bilgi bulamadım rewrite. Bulduğum tek performans esaslı tavsiye, bir sunucu yapılandırma dosyalarına erişimi varsa, o zaman mümkün olduğunca hareket için en iyi olmasıdır gelen .htaccess dosyası için yapılandırma dosyası ve devre dışı .htaccess dosyaları tamamen (ya da belirli dizinleri yeri belirtin .htaccess dosyaları olmalıdır ) okunabilir.

Buradaki mantık, config dosyasına yerleştirilen kuralların yalnızca bir kez okunması gerektiğidir. Htaccess işleme açıksa, her istek için, sunucunun her dizininde (istenen dizinde veya daha yüksekte) varolan ya da olmasın olası htaccess dosyaları aranmalıdır. Ve eğer yaparlarsa, herkes yeniden okunmalıdır.

  • apache dokümanlar bundan ".htaccess dosyaları" bölümünün alt kısmında bahseder, ancak nedenini açıklamaz ve bunun nasıl yapılacağını öğrenmek için uğraşmanız gerekir.
  • http://www.apacheweek.com/features/tips "Apache Nasıl Hızlandırılır" bölümü, nedenini hızlı bir şekilde görsel olarak gösterir .
  • Apache Performansı: .htaccess'i devre dışı bırak - önce ".htaccess'i devre dışı bırakma ve Apache config içinde mod_rewrite kullanma" bölümünü okumak için aşağı atlayın.

-1

Ben de aynı endişe gönderildi ama bu bir apache sunucu yapılandırma değişikliği sonra apache yeniden başlatmak için izin veren bir sunucu yöneticisi site perspektif.

Şimdiye kadar aldığım en iyi yanıt önce Dosya ile ilgili yönergeleri listelemek.

Bu, apache'nin her dizindeki dizinleri ve htaccess talimatlarını yönetme ihtiyacı ile ilgili mantıklıdır.

Yani, önce dosya ile ilgili yönergeleri, daha sonra bariz sırayla apache htaccess işlemini sona erdirmek için açık blokları listeler.

İstekleri optimize etmek için olası çözüm: - URL ile ilgili düzeltmeleri iste - Dizine ilişkin kısıtlamalar - Dizine ilişkin kısıtlamalar - dosyayla ilgili kısıtlamalar - proxy kısıtlamaları <- hepsini öldür - boş kullanıcı aracısı <- hepsini öldür ... liste sonsuz eğlencelidir

Direktifler dizisi ile ilgili kaygım. Örneğin, RewriteConds'dan önce Dizin, dosya ve Başlık yönergelerini ayarlamam gerekir mi?


dipnot: RewriteRule kalıp değiştirme [bayraklar] Bu bariz uygulama işleme sorusuna cevap vermeyin!
Testbench
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.