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

Soru .Htaccess'te yönergesini nasıl kullanmalıyım?


.Htaccess dosyasında Apache's If yönergesi kullanarak koşullu bir deyim eklemeye çalışıyorum.

Bu sayfayı referans ettim http://httpd.apache.org/docs/trunk/mod/core.html#if ama pek fazla detay vermez / pek çok örnek vermez. Verdiği iki eksik örnek:

<% {REQUEST_METHOD} GET, HEAD, SEÇENEKLER> ise

ve

<If "$ req {Host} =" "">

Bu yüzden .htaccess dosyasına eklemeyi denedim:

<% {SERVER_PORT} GET, HEAD, SEÇENEKLER> ise
   # burada birşey yok
</ Ederse>

Ama ben devam ediyorum 500 hatası sayfayı yüklemeyi denediğimde. Bu benim yerel yüklememde ve daha önce iyi çalışıyordu (ya da bu kodu kaldırırsam). İnanıyorum AllowOverride All Global olarak kurmak ve If yönergesi için bağlamı .htaccess ("Bağlam: sunucu yapılandırması, sanal konak, dizin, .htaccess") içinde bulunmasına izin vermelidir.

Birisi bana <If> yönergesini nasıl kullanabileceğine dair bazı örnekler verebilir mi, yoksa benim için neden çalışmadığına dair bir rehber olabilir mi?

Teşekkürler!


13
2018-02-22 20:03


Menşei


500 hatası alıyorsanız, bu Apache'nin hata günlüğünüze bir şey kaydettirdiği anlamına gelir. Ne diyor? Ayrıca, sınavınız SERVER_PORT içinde GET,HEAD,OPTIONS hiçbir anlam ifade etmiyorSERVER_PORT isteğin alındığı numara port numarası olacak. - larsks
Sağol, domuzcuklar. <If> yönergesini desteklemeyen apache 2.0 çalıştırıyor gibi görünüyor. Belki de 2.3'e yükseltmek istiyorum. En azından bu, neden herhangi bir örnek olmadığını açıklar (özellik b / c çok yeni). Tavsiye için teşekkürler. - cwd


Cevaplar:


<If> Direktif sadece Apache 2.4+ sürümünde değil 2.2 veya daha önceki sürümlerde kullanılabilir.

http://httpd.apache.org/docs/2.4/mod/core.html#if

Dokümantasyon 2.2'de mevcut değil:

http://httpd.apache.org/docs/2.2/mod/core.html#if


15
2018-02-22 20:39





<If> Apache 2.4 + 'da kullanılabilir, bu yüzden ö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>

Alternatifler <If>

Apache 2.2'de şartlı ifadeler yapmak için hala birkaç tane daha çözüm var.

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

    • Apache yapılandırması
    • SetEnvIf
    • mod_rewrite en RewriteMatch
  • Sonra koşullu ifadeleri kullanarak yapabilirsiniz

    <IfDefine MyEnvironmentVar>
       ...
    </IfDefine>
    

Örnek:

# 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

7



Test edin ama işe yaramayın! apache belgesinde, <IfDefine> Direktif sadece başlangıçta ayrıştırılır ve parameter-name sadece komut istemi kullanarak geçebilir httpd -Dx=y - William Leung
Senin için "Alternatifler" in iyi çalışıyordu, güzel örnek. - Kyborek