.Htaccess'te <If> yönergesini nasıl kullanmalıyım?


16

.Htaccess dosyamda Apache'nin If yönergesini kullanarak koşullu bir ifade eklemeye çalışıyorum.

Bu sayfaya http://httpd.apache.org/docs/trunk/mod/core.html#if referans verdim ancak fazla ayrıntı vermedi / birçok örnek vermedi. Verdiği iki eksik örnek:

<GET, HEAD, OPTIONS IN% {REQUEST_METHOD} ise> 

ve

<"$ Req {Host} = ''"> 

Bu yüzden .htaccess dosyama eklemeye çalıştım:

<% {SERVER_PORT} GET, HEAD, OPTIONS IN>
   # henüz burada bir şey yok
</ Ederse>

Ancak sayfayı yüklemeye çalıştığımda Hata 500'ü almaya devam ediyorum . Bu yerel yüklememde ve daha önce iyi çalışıyordu (veya bu kodu kaldırırsam). Ben inanıyorum AllowOverride Allküresel kurmak ve direktif .htaccess mevcut olalım olursa için bağlam ( "Bağlam: sunucu geneli, sanal konak, dizin, .htaccess").

Birisi bana <If> yönergesinin doğru şekilde nasıl kullanılacağına dair bazı örnekler verebilir veya neden benim için işe yaramadığına dair bir rehberlik verebilir mi?

Teşekkürler!


1
500 hatası alıyorsanız, bu Apache'nin hata günlüğünüze bir şey kaydettiği anlamına gelir. Ne diyor? Ayrıca için test SERVER_PORTiçinde GET,HEAD,OPTIONSherhangi bir anlam ifade etmez ( SERVER_PORTistek alındığı numara port numarasını olacak).
larsks

Teşekkürler, larsks. Görünüşe göre <If> yönergesini desteklemeyen apache 2.0 çalıştırıyorum. Belki 2.3'e yükseltmeye bakmalıyım. En azından bu, hiçbir yerde neden örnek olmadığını açıklıyor (b / c özelliği çok yeni). Tavsiye için teşekkürler.
cwd

Yanıtlar:



16

<If> yalnızca Apache 2.4 ve sonraki sürümlerinde kullanılabilir, bu nedenle öncelikle bu sürüme sahip olduğunuzdan emin olun.

Örnekler

# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
  Redirect permanent "/" "http://www.example.com/"
</If>

<If "%{HTTP_HOST} =~ /regex/">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

<If "%{REQUEST_URI} =~ m#/regex/including/slashes/#">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

Alternatifleri <If>

Hala takılı kalırsanız Apache 2.2'de koşullu ifadeler yapmak için birkaç çözüm daha vardır.

  • Ortam değişkenlerini şu yollarla ayarlayabilirsiniz:

    • Apache yapılandırması
    • SetEnvIf
    • mod_rewrite en RewriteMatch
  • Ardından koşullu ifadeleri kullanarak

    <IfDefine MyEnvironmentVar>
       ...
    </IfDefine>
    

Misal:

# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX

# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX

# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX

1
Test edin ama çalışmıyor! apache belgesinde, <IfDefine>direktif başlangıçta sadece ayrıştırmak ve parameter-namesadece komut istemi kullanarak geçebilirhttpd -Dx=y
William Leung

"If için Alternatifler" benim için iyi çalışıyor, güzel bir örnek.
Kyborek
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.