PHP: dizin / somedirectory eşleşen URL ayrıştırma ve / koşullu kod çalıştırmak

6 Cevap php

Bu oldukça basit olmalı, ama ben geçerli URL ayrıştırmak ve kullanıcı /sitemap/ dizinde olup olmadığına bağlı olarak koşullu kod çalıştırmak istiyorum.

Yani, örneğin, site example.com, ve eğer isteği ise example.com/sitemap/.

Sonra bu durumda koşullu kod yürütmek istiyor. Bu alır yerleşik bir işlevi varsa ben emin değilim bu yüzden ben wordpress kullanıyorum ...

Saf PHP çözüm gayet iyi.

6 Cevap

Wordpress bunun için bazı işlevi varsa ben bilmiyorum. Ama bunu yapabilirsiniz:

$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\\?.*/', '', $_SERVER['REQUEST_URI']);

$_SERVER['REQUEST_URI'] URI yolunu artı sorgu içeren ve yukarıdaki kod sadece URI yolunu alacak. Sonra da dize ile mukayese edebilirsiniz:

if ($_SERVER['REQUEST_URI_PATH'] == '/sitemap/') {
    // URI path is "/sitemap/"
}

Yoksa starts with testi yapın:

$start = '/sitemap/';
if (substr($_SERVER['REQUEST_URI_PATH'], 0, strlen($start)) == $start) {
    // URI path starts with "/sitemap/"
}

Ve basit bir komut phpinfo () çalıştırın, size saf PHP ellerini almak isteyebilirsiniz HERŞEYİ göreceksiniz. (Ve diğer bir sürü şey de, sadece PHP değişkenler için çıkış altına gidin.)

Bunun için yapı-web sunucu değişkenleri kullanabilirsiniz. İşte bazı örnek şunlardır:

  • $_SERVER['HTTP_HOST'] - güncel istek için ana bilgisayar adı
  • $_SERVER['REQUEST_URI'] - get parametreleri ile talep url

Ayrıca print_r($_SERVER); tarafından tam listesini görebilirsiniz.

$paths = explode ('/', $_SERVER['PHP_SELF']);

Bu size verilen komut için yolları bir dizi verecektir. Siz çıkan dizi dayalı mantığını gerçekleştirebilirsiniz.

current( explode( '/', trim( $_SERVER['REQUEST_URI'], '/' ) ) )

url ilk bölümünü dönecektir

explode( '/', trim( $_SERVER['REQUEST_URI'], '/' ) )

url parçaların bir dizi yaratacak

PHP kod aşağıdaki hattı ile geçerli sayfanın HTTP Request URL alırsınız:

$ Url = ((preg_match ("/ (^ \ z | ^ off \ z) / i", $ _SERVER ['HTTPS'])) 'http://': 'https://'?). $ _SERVER ['HTTP_HOST']. $ _SERVER ['REQUEST_URI'];

Sonra bu gibi güvenilir bir sonuç dizisini almak için bu URL'yi ayrıştırmak isteyebilirsiniz:

  • [ŞEMA] => http
  • [YETKİ] => kullanıcı: pass@www.domain.com: 80
  • [USERINFO] => kullanıcı: parola
  • [KULLANICI] => kullanıcı
  • [PASS] => geçişli
  • [HOST] => www.domain.com
  • [REGNAME] => www.domain.com
  • [DOMAIN] => www.domain.com
  • [MARKALI] [] =>
  • [MARKALI] [] => com
  • [MARKALI] [] => domain
  • [MARKALI] [] => www
  • [PORT] => 80
  • [PATH] => / dir1/dir2/dir3/page.html
  • [BÖLÜMLERE] [] => dir1
  • [BÖLÜMLERE] [] => dir2
  • [BÖLÜMLERE] [] => Dir3
  • [BÖLÜMLERE] [] => sayfa.html
  • [SORGU] => anahtarı1 = değer1 & anahtar2 = value2
  • [GET] [anahtarı1] => değer1
  • [GET] [anahtar2] => value2
  • [FRAGMAN] => çapa / hat
  • [ÇAPA] [] => çapa
  • [ÇAPA] [] => satır

RFC 3986 ve indirmek ve ücretsiz kullanıma RFC 3987 göre URL'ler / URI'lere taşıma ve ayrıştırma için bir standart uyumlu, sağlam ve başarılı PHP Class var:

http://andreas-hahn.com/en/parse-url