PHP 5 Tomcat veya GAE benzer taşıma isteği yapabilir miyim?

5 Cevap php

Ben gitmek istiyorum Diyelim

http://example.com/something/a/few/directories/deep

Ben bu dizinlere yapmak zorunda kalmadan PHP bu işleyebilir bir yolu var mı? Ben sadece orada bir değişken ve iş gibi etki alanı adından sonra her şeyi almak istiyorum.

5 Cevap

Bunu yapmanın en yaygın yolu mod_rewrite kullanarak gereğidir. (Orada bu bir giriş http://articles.sitepoint.com/article/guide-url-rewriting). Bu dahili PHP komut geçirilen parametreleri sorgulamak için bu dostu URL'ler haritasına sağlar.

Tabii. Başlangıç ​​sabit veya sadece birkaç olası değerler varsa bile mod_rewrite gerekmez. something (hiçbir uzantı) adında bir php dosyası yapın ve PHP gibi onu tedavi etmek için (bir SetHandler veya benzeri yönergesi üzerinden) Apache söylemek. Ardından, a/few/directories/deep IIRC gibi bakacağız, $_SERVER['PATH_INFO'] komut inceleyin. Ancak sizin gibi yönlendirmek için isteğinizi kullanabiliriz.

Alternatif olarak. Martin dediği gibi, /dispatch.php/something/a/few/directories/deep için yeniden yazmak için basit bir mod_rewrite kuralı kullanabilir ve daha sonra PATH_INFO olarak bütün yolu var.

Sen do not böyle bir senaryoyu ele mod_rewrite gerekir. Popüler PHP çerçeveler çoğu şu anda tanım kademeli ayrıştırma destekler. Bu hala yamalı gereken birkaç güvenlik delik bırakır basit bir örnek.

Sen global $ _SERVER değişkenleri birini alarak ve ileri üzerine bölerek idare edebileceğini şöyle eğik:

if (!empty($_SERVER['REQUEST_URI'])) {
    $segments = explode('/', $_SERVER['REQUEST_URI']);
}

$segments değişkeni üzerinde yineleme için segmentleri bir dizi içerecektir.

Eğer apache kullanarak varsayarsak ...

Index.php her şeyi işaret etmek, bir yeniden yazma kuralı (kendi vhost Konf ya da sadece size doc kök. Htaccess dosyası açılır) ekleyin. Sonra index.php içinde, istek URI ayrıştırmak ve yolunu ayıklamak

RewriteEngine on
RewriteRule ^.*$ index.php [L,QSA]

index.php:
$filepath = $_SERVER['REQUEST_URI'];
$filepath = ltrim($myname, '/'); //strip leading slash if you want.

Bu aslında bir PHP5 ilgili quesion değil - URL yeniden sunucunuza parçasıdır.

Kullandığınız zaman, mod_rewrite Apache (IIS hakkında bilmiyorum, ama büyük olasılıkla benzer bir şey) olduğunu.