PHP URL eşleme?

7 Cevap php

Ben bir Java arka plan geliyor ve herhangi bir servlet tabanlı teknoloji ile, belirlenen bir servlet URL'lerin bir dizi (örneğin / raporlar / , /secure/. Yapmak) haritasına Önemsiz. Şimdi PHP ile daha az aşina değilim ama ben henüz PHP (veya mod_php) ile tamamen aynı şeyi yapar bir şey görmedim. Ben basit bir şey eksik bu tamamen mümkündür.

Bu PHP nasıl yapabilirim?

Ben bunu yapmak istiyorum nedenlerinden biri "tek kullanımlık" URL'ler olduğunu. Şimdi bu sorta (bir MD5 hash belirteci gibi) GET parametreleri ile yapılabilir ama birçok sorunlara genel bir çözüm olarak URL haritalama ilgileniyorum.

Böyle bir şey kullanmak için bir başka büyük nedeni RESTful URL'leri sahip olmaktır.

7 Cevap

Apache, bu kaynakları kontrol, mod_rewrite ile php sayfaları için Yeniden Yazma kurulum URL edebiliyoruz:

Mod_rewrite kullanarak dışında, zaten basit bir hile ile sihirli bir küçük yapabilirsiniz bildirdi.

Bir yönerge bu gibi. Htaccess koy

<FilesMatch "^servlet$"> 
  ForceType application/x-httpd-php
</FilesMatch>

(bu sizin dağıtıcı adı olacaktır) sizin seçtiğiniz bir düzenli ifade ile ^ servlet $ yerine

Dosya servlet buna benzer olmalı

<?php
  $data = explode('/',$HTTP_SERVER_VARS['PATH_INFO']); // $data[0] always empty
  $fileToInclude = $data[1].'.php';
  if (file_exists($data[1]) {
     $params=array_slice($data,2); // you can do here something more sophisticated
                                   // for example sanitize parameters or assemble 
                                   // an hash
     include ($fileToInclude);     //Think to this file as a servlet
  } else {
    // issue a 404 error, maybe one of the 500 series
  }
?>

The url can have the form: http://yoursite/servlet/reports/sales/2009 you can also reach the form http://yoursite/reports/sales/2009 plaiyng a little with the .htacces and the dispatcher.

Bu yöntem, mod_rewrite FilesMatch (1.3 +) ve ForceType olarak gerekli değildir olanaklar (2.0 +) apache çekirdek bulunmaktadır var

See for reference
http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs/1/

Kullandığım bir hile $ _ SERVER ['PATH_INFO'] (Ben Apache gerekiyor sanırım) olduğunu. Bu PHP dosya uzantısı sonra size tüm bilgileri alır.

http://www.example.com/page.php/rest/url

$ _ SERVER ['PATH_INFO'] içerecektir:

"/rest/url"

Sayfa sonra yönlendirebilirsiniz, süreç o dizeye dayalı bazı kod ya da her neyse.

Eğer bazı şeyleri değiştirmek Ayrıca eğer statik dosya yerleşim için bir dizin adını page.php yapabilir, Apache Yapılandırml ya. HTACCESS erişiminiz yoksa, bu iyidir. Oh ve PHP. Php uzantısı olması gerekmez. Ben geçmişte. Api veya somesuch kullandım.

http://www.example.com/worker.api/rest/url

Bu benim için iyi iş gibi görünüyor.

Gibi PHP yapılamaz. Java, bu Servlet'ler ya bu harita URL'ler değil, ama bu servlet kabı (örneğin Tomcat) yapılandırma olduğunu unutmayın.

Sen kullanarak PHP uygulamaları için benzer sonuçlar elde edebilirsiniz URL rewriting.

Bu mod_rewrite genellikle için kullanılacak bir şey gibi geliyor (Apache bir parçası değil, PHP gibi.) Bunu gerçekleştirmek PHP bir şey duymadım.

Apache dışında HTTP sunucuları için seçenekler:

Eğer lighttpd.conf kullanıyorsanız, daha sonra mod_rewrite modülü tamamen farklı bir yapılandırma sözdizimi vardır. Ayrıntılar için http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite bakın.

IIS kullanıyorsanız, o zaman (http://www.isapirewrite.com/) veya URL Rewrite Modülü ISAPI_Rewrite gerekir (http://learn.iis.net/page.aspx/460/using-url-rewrite-module/).

Diğerleri de söylediğim gibi bunu yapmak için mod_rewrite kullanabilirsiniz ama aynı zamanda web çerçeveler birçok kullanmak ne bir ön kontrolör tasarım deseni kullanabilirsiniz. Horde routes veya Zend_Controller_Router_Rewrite hangi MVC için kullanılabilecek bir göz atın,