Dinamik URL ayrıştırma soru

10 Cevap php

Ben gibi tek tek sayfaları için URL'leri birçok, birçok siteleri görmek

http://www.mysite.com/articles/this-is-article-1 http://www.mysite.com/galleries/575

Ve onlar yavaş koşmak yok, yönlendirme yok ...

Ben yeterince kolay, URL ayrıştırmak için biliyorum. Ama aklımda, bu dinamik bir sitede yavaş ve hantal görünüyor. Yanı sıra, sayfaları tüm staticly sayfanın tüm bileşenleri (kötü olurdu) ... hem de statik demektir o zaman (özel bir URL HENDE) inşa halinde

Ben bu genellikle yapılır nasıl hakkında bazı fikirler duymak isteriz.

10 Cevap

Öncelikle, karşılaştırma / düz / URL, statik sayfaları hizmet veren statik dosyaları hizmet veren, her zaman, her zaman kazanacağını ile / düz / CGI (CGI vb PHP, ISAPI, ASP.NET, olabilir) kullanarak uygulama düzeyinde yeniden. Sadece daha az iş var. Örneğin, Windows ve Linux (ben biliyorum) HTTP üzerinden yerel bir sürücü statik dosyaları hizmet için çekirdekte bile geliştirmeleri vardır. Ayrıca noktayı ben bile birkaç sunucuyu bir kriter bulunan ve işletim sistemleri: http://www.litespeedtech.com/web-server-performance-comparison-litespeed-2.0-vs.html#RESULT statik dosyaları hizmet CGI herhangi bir türünü kullanarak ciddi şekilde daha hızlı olduğunu unutmayın

Ancak, potansiyel olarak etkili yeniden yazılmış URL'leri kullanarak ve önbelleğe alma ile yapılır, performans ve ölçeklenebilirlik kazanımlar olabilir. Eğer uygun önbellek başlıklarını dönerseniz bile sitenizde hit almazsınız böylece o verileri önbelleğe için aşağı sunucuları sağlar (cache-control directive in HTTP documentation bakınız). {: [(1)]}: Ancak, statik sayfalar ile aynı parası alabilir :) Ben sadece Yüksek Ölçeklenebilirlik blogunda bir veya iki gün önce çok bu konuda bir makale okumak için ne tahmin

Eğer yukarıdaki işleyebilir birçok yolu vardır. Genel olarak, her zaman, ilgili yönlendirme, en azından bazı formu var -. Olduğunu htaccess düzeyde yerine php de olabilir ancak. Burada bir senaryo:

  1. Kullanın. Htaccess php işleme komut yönlendirmek.

  2. Uri ($ _SERVER ['REQUEST_URI']) ayrıştırmak ve (örneğin, sizin örnekler gibi yazılar veya galerileri) içerik türünü tespit.

  3. Doğru veri elde etmek için (genellikle tekrar örneklerde olduğu gibi, Uri sonuna eklenen) sağlanan id kullanın - olması statik bir dosya hizmet veya istenen içerik için bir veritabanını sorgulayarak.

Bu yöntem SEO artan bir çok popüler bir yoldur, ancak haklı olarak vurgulamak gibi bu yaklaşımı alarak zorluklar olabilir - değil, tipik performans, ancak bu uygulama iyi düşünülmüş değilse daha sonra (geliştirme veya uygulama daha zahmetli yapabilir ve ölçeklenebilir).

Onlar hızlı ve optimize edilmiş olduğu gibi bir yeniden yazma motoru en iyi yaklaşımdır. Lütfen sunucu tarafı betik sadece düz Yerel değişkenler kullanmak için izin.

Apaçiler mod_rewrite en yaygın olanıdır.

Genellikle (tüm istekleri belirtilen yolu için bir yol için hangi görünüyor, web uygulamasına yönlendirilir) (Apache mod_rewrite gibi bir şey üzerinden) sunucu veya web uygulaması ya, a rewrite engine vasıtasıyla yapılır.

Benim durumumda, ben bu özelliği zaten yerleşik olan web çerçeve sopa. (CodeIgniter)

... As well, if the pages are all staticly built (hende the custom URL) then that means all components of the page are static as well... (which would be bad)

... Evet, bu gerçekten çok kötü. : O

Bu en yeniden yazmak mümkündür

  1. . Htaccess dosyası veya httpd.conf veya vhosts.conf dosyasında birinde sunucu düzeyinde. Bu genellikle uygulama düzeyinde yapılır yeniden yazılmasıyla bir sonraki seviyeye daha hızlıdır.

  2. (PHP ile bu durumda) uygulama düzeyinde. Sen URL analiz ve buna dayalı bir şekilde yönlendirmek özel yönlendirmeleri yazabilirsiniz. Böyle Zend Framework (ZF) gibi modern web çerçeveleri URL yeniden kontrol etmek için yolları kullanın. Aşağıdaki ZF ile statik yol örneğidir

$route = new Zend_Controller_Router_Route_Static('latest/news/this/week', array('controller' => 'news'));

Haber denetleyiciye http://somedomain.com/lastest/news/this/week herhangi bir talep yönlendirme olur Hangi.

Dinamik bir rotanın bir örnek olacaktır

$ Yol = new Zend_Controller_Router_Route ('galerileri /: id', array ('controller' => 'galeri'));

Değişken $ id bu denetleyiciye availbe olacaktır (ve bizim örnek kullanılarak yukarıdaki 575 olacaktır) Nerede

Bunlar bir uygulama geliştirmek ve geriye dönük bir şey istediğiniz URL'yi değiştirmek için izin çok yararlı araçlardır.

A very simple way is to have a CGI parse the PATH_INFO portion of the URL. In your example:

http://www.example.com/articles/12345 (where "articles" is a CGI script)
                       ^CGI^   ^^^^^^PATH_INFO

Script adı sonra her şey PATH_INFO'yu CGI başlığındaki komut geçirilir.

Sonra bir veritabanı arama ya da ne olursa olsun sayfa oluşturmak isteyen yapabilirsiniz.

PATH_INFO URL farklı kısımlarını koymak IIS sunucusu ve Apache sunucusu olarak bu değeri erişirken dikkatli olun. (IIRC: IIS incorrectly tüm URL kullanır ve Apache erik yukarıda belirtildiği gibi.)

Apache sunucuları mod_rewrite'ı bu için en yaygın, bu gibi örnek bir şey için bu kullanılacak, böylece düzenli ifadeler ile diğer URL'ler için istek URL'ler yeniden sağlayan bir apache mod bulunuyor:

RewriteEngine ON
RewriteRule ^articles/(.*) articles.php?article=$1 [L]
RewriteRule ^galleries/(\d*) galleries.php?gallerie=$1 [L]

This costs hardly any time, and in practice is just as fast as having the url:
www.mysite.com/galleries.php?gallerie=575 but looks way better

Ben preiously bu yöntemi kullandık -. Sadece sizin girmeden olması gerekmez böylece regex yönlendirilir olmamalı ve daha sonra her şey php tarafından işlenir dosya uzantılarını eklemek gerekir dosya htacces

suceed with urls

Ben bu topluluğu seviyorum!

Bu gerçekten iyi bir seçenek ve daha fazla araştırmak gerekir yollar vardır. Lütfen giriş Herşey için teşekkürler.