SORU
13 Kasım 2008, PERŞEMBE


Büyü gizli özellikleri

mod_rewrite konuları iyi bir dizi son zamanlarda bazı yönlerini nasıl çalıştığını üzerinde biraz kafa karışıklığı ile yüzer gibi görünüyor. Sonuç olarak ortak işlevselliği, ve belki bir kaç can sıkıcı bir nüanslar üzerine bir kaç not hazırladım.

Ne diğer özellikleri ortak sorunlar / mod_rewrite kullanarak üzerinde çalışacak mı?

CEVAP
13 Kasım 2008, PERŞEMBE


Büyü kuralları yerine

mod_rewrite kurallar .htaccess dosya içinde httpd.conf dosya içinde, ya da yerleştirilebilir. eğer 15**, kurallar koyarak erişimi varsa, burada bir performans yararı kuralları .htaccess dosyası her çağrıldığında farklı olarak bir kez işlenmiş, gibi) sunacak.

Büyü istekleri günlüğü

httpd.conf dosya içinde etkin olabilir (<Virtual Host> dahil) günlüğü:

# logs can't be enabled from .htaccess
# loglevel > 2 is really spammy!
RewriteLog /path/to/rewrite.log
RewriteLogLevel 2

Ortak kullanım örnekleri

  1. tek bir noktadan tüm istekleri huni için:

    RewriteEngine on
    # ignore existing files
    RewriteCond %{REQUEST_FILENAME} !-f   
    # ignore existing directories
    RewriteCond %{REQUEST_FILENAME} !-d   
    # map requests to index.php and append as a query string
    RewriteRule ^(.*)$ index.php?query=$1 
    

    Apache 2.4 beri de FallbackResource kullanabilirsiniz.

  2. 301/302 yönlendirmeler için:

    RewriteEngine on
    # 302 Redirect
    RewriteRule ^oldpage.html$ /newpage.html [R=302]  
    # 301 Redirect
    RewriteRule ^oldpage2.html$ /newpage.html [R=301] 
    

    not: dış yönlendirmeler yönlendirmeler: örtülü 302

    # this rule:
    RewriteRule ^somepage.html$ http://google.com
    # is equivalent to:
    RewriteRule ^somepage.html$ http://google.com [R]
    # and:
    RewriteRule ^somepage.html$ http://google.com [R=302]
    
  3. SSL zorluyor

    RewriteEngine on
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://example.com/$1 [R,L]
    
  4. ortak bayrak kullanımı:

    • [R] bir yönlendirme (varsayılan 302) kuvvet
    • [R=301] 301 yönlendirme gücü
    • [L] yeniden yazma işlemi (not aşağıda ortak tuzaklar bakın) dur
    • [NC] büyük / küçük harf duyarlı eşleşen

    mix ve MAÇ bayraklar

    RewriteRule ^olddir(.*)$ /newdir$1 [L,NC]
    

Ortak tuzaklar

  1. mod_alias stili karıştırma mod_rewrite ile yönlendirir

    # Bad
    Redirect 302 /somepage.html http://example.com/otherpage.html
    RewriteEngine on
    RewriteRule ^(.*)$ index.php?query=$1
    
    # Good (use mod_rewrite for both)
    RewriteEngine on
    # 302 redirect and stop processing
    RewriteRule ^somepage.html$ /otherpage.html [R=302,L] 
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # handle other redirects
    RewriteRule ^(.*)$ index.php?query=$1                 
    

    not: mod_rewrite ile mod_alias karıştırabilirsiniz ama sadece yukarıdaki gibi temel yönlendirmeler için daha fazla çalışma gerektirir.

  2. içerik sözdizimi etkiler

    .htaccess dosyaları içinde, önde gelen eğik desen kullanılmaz:

    # given: GET /directory/file.html
    
    # .htaccess
    # result: /newdirectory/file.html
    RewriteRule ^directory(.*)$ /newdirectory$1
    
    # .htaccess
    # result: no match!
    RewriteRule ^/directory(.*)$ /newdirectory$1
    
    # httpd.conf
    # result: /newdirectory/file.html
    RewriteRule ^/directory(.*)$ /newdirectory$1
    
    # Works in both contexts:
    RewriteRule ^/?directory(.*)$ /newdirectory$1
    
  3. [L] son değildir! (bazen)

    .htaccess kapsamında, [L] mod_rewrite durdurmak için güç olmayacaktır. iç-istekleri alt tetiklemek için devam eder

    # processing does not stop here
    RewriteRule ^dirA$ /dirB [L] 
    # /dirC will be the final result
    RewriteRule ^dirB$ /dirC     
    

    bizim günlük gösterileri detayları yeniden yazmak:

    rewrite 'dirA' -> '/dirB'
    internal redirect with /dirB [INTERNAL REDIRECT]
    rewrite 'dirB' -> '/dirC'
    

    Bu gibi durumlarda [END] [L] yerine kullanılmalıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bart Baker

    Bart Baker

    1 Aralık 2006
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • paikimchung

    paikimchung

    12 Mayıs 2006