Nasıl Yapılır: PHP URL yeniden yazma?

9 Cevap php

Benim PHP uygulamalarında URL yeniden uygulamak çalışıyorum. MYSQL - Birisi PHP yeniden URL uygulanması adım prosedürü bir adım paylaşabilirsiniz.

Benim uygulamada aşağıdaki URL yeniden uygulamak istiyorum, ben yönlendirmek istiyorum

1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro

karşı

1. http://example.com/videos/play.php?title=google-io-2009-wave-intro
2. http://example.com/videos/play.php?id=203

Please tell me how karşı implement both url rewriting in any of the above way.

Edited: please answer this in your answers >> One more thing which URL will be best according karşı SEO, management, application point-of-view out of the following two types.

1. http://example.com/videos/play/google-io-2009-wave-intro
2. http://example.com/videos/play/203/google-io-2009-wave-intro

Teşekkürler,

9 Cevap

A Beginner's Guide to mod_rewrite.

Genellikle bu mod_rewrite modülü sağlayarak daha fazla bir şey (büyük olasılıkla zaten ev sahibi ile etkin), ve daha sonra web-dizine bir. Htaccess dosyası ekleyerek olacaktır. Bunu yaptıktan sonra, sadece birkaç satır uzakta yapılıyor vardır. Yukarıda bağlantılı öğretici seninle ilgilenecek.

. Sadece eğlence için, burada yeniden bir Kohana htaccess dosyası bulunuyor:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /rootDir/

# Protect application and system files from being viewed
RewriteRule ^(application|modules|system) - [F,L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/
RewriteRule .* index.php/$0 [PT,L]

Bu ne yapacağız tüm istekleri alır ve index.php dosyası aracılığıyla onları kanal olduğunu. Eğer www.examplesite.com / konu / php ziyaret Yani, aslında www.examplesite.com/index.php?a=subjects&b=php ziyaret edilebilir.

Bu URL'ler çekici bulursanız, ben bir adım daha ileri gitmek ve MVC Framework (Model View Controller) kontrol etmenizi öneririm. Bu aslında size fonksiyonların bir grup gibi web sitenize tedavi sağlar:

www.mysite.com / espriler

public function jokes ($page = 1) {
  # Show Joke Page (Defaults to page 1)
}

Or, www.mysite.com / espriler/2

public function jokes ($page = 1) {
  # Show Page 2 of Jokes (Page 2 because of our different URL)
}

Ilk eğik bir işlevi çağırır ve bu fonksiyon parametreleri doldurmak takip hepsi nasıl fark. Bu gerçekten çok güzel, ve web geliştirme çok daha eğlenceli hale getirmek!

Yalnız PHP ile bunu yapamaz. (Eğer apache kullanarak varsayarak) mod_rewrite'ı içine bakmak gerekir.

Yeniden mod kullanarak:

RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2

example.com / play.php? id = 203 & name = google-io-2009-dalga-intro

olarak çalışmak istiyorum

example.com/videos/play/203/google-io-2009-wave-intro

Lütfen sunucu (apache / mod_rewrite) destekliyorsa, ziyaretçinin yeniden yönlendirmek için bir. Htaccess dosyasını kullanabilirsiniz.

(Sadece bir taslak, kendi ihtiyaçlarına adapte ...) gibi bir şey:

RewriteEngine On
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L]

İkinci örnekte için.

Yönlendirme yeniden aynı olmadığını unutmayın.

Sunucu isteği alır ve tepki bir yönlendirme olarak gönderildiği zaman bir yönlendirme olduğunu. Örneğin, bir sayfa www.example.com / sayfayı istemek. Sunucu bu aldığında, sayfa veya sunucu kendini ya tarayıcıya bir yönlendirme komutunu verir. Yönlendirme komutu temelde ": Yeni bir sayfa buraya gidin" diyor. PHP, bu başlık şeklinde olan ('Konum: newpage.html');

Sunucu tarayıcıdan isteği o site için düzenli ifadeler eşleşen bir listede görünüyor aldığında bir yeniden yazma. Bir eşleşme bulunursa, URL o forma yeniden yazılır ve buna göre yanıt edilir. Örneğin, istenen URL www.example.com / specificpage www.example.com/?loadpage=specificpage olarak (sunucu ucunda) yeniden yazılabilir. Tarayıcı başka bir yere gitmek gerektiğini belirterek başlık bilgilerini alır asla.

Size ayrıntılı açıklama vererek, ama belki bir başlangıç ​​noktası için DokuWiki bakmak olamazdı üzgünüm.

Onun kurulum yılında 3 modları kabul eder:

  1. Düzenli URL'ler:? Id = zzz
  2. . htaccess rewrite: Rewritting yapmak apache kullanır
  3. dahili (php) yeniden yazım: URL'ler gibi bakıyor sona http://www.example.com/kb/doku.php/start

Sadece indirin ve kodunu taramak böylece ücretsiz.

Bir not olarak, apache yönlendirme çok büyük olasılıkla en iyi çözümdür ama saf php bir durumda kod yeniden yazabilecek apache kadar kolay değildir IIS6 sunucuları çalıştırmak için gidiyor da ilginç.

Ne yazık ki, web sunucusu değil, PHP kadar gerçekten. Apache veya başka bir şey kullanırsanız, bu komut önce bu ilgisi bağlı olarak yürütülür. Ben mod_rewrite kullanmak, ve bir örnek yazma kuralı bu gibi görünüyor:

<Directory "/home/www/html">
    RewriteEngine On
    RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L]
</Directory>

Yukarıdaki kural temelde URL gerçek bir dosyaya veya dizine geçerli bir yol ise, yükleyin diyor. Aksi halde, index.php ile çalıştırın.

Tekrar yorum ve soru okuduktan sonra, benim önceki cevabı sizin için arıyoruz tamamen şey olmadığını fark ettik. Eğer yeniden yazmak isterseniz daha sonra, örneğin kullanıcı tipleri aslında www.f2.com göreceksiniz www.f1.com, ancak etki alanı aynı kalacak, muhtemelen kurulum a gerek Yani burada bazı eklemeler, / / ​​vekil URL adresleri yönlendirmek reverse proxy Bunun için Apache kullanarak. Bu hareket en mod_rewrite benzer.

Ikinci kısmı ile ilgili olarak, modern bir paletli da URL bağlantısını gerçekleştirerek beri ilk seçenek bilge iyi bir performans olduğunu düşünüyorum analizleri.

Previous answer:
And using PHP you can achieve redirection like:

<?php
// Here you can parse the current location
// and decide whenever you want to go
// if $_SERVER[ 'PHP_SELF'] some conditions then....
header('Location: http://www.example.com/');
?>

Dan php.net. Here daha örnek.

Sen bir ön denetleyicisi kullanarak biraz farklı yukarıdaki önerileri Bu yaklaşım olabilir, bu sadece PHP, özel URL'ler yapmak için ortak bir çözüm ve tüm dillerde kullanılmaktadır. İşte bir kılavuz: http://www.oreillynet.com/pub/a/php/2004/07/08/front%5Fcontroller.html

Esasen her URL için denir bir index.php dosyası yaratacak, kendi iş URL ayrıştırma ve URL içeriğine dayalı çalıştırmak için hangi kod belirlemektir. Yani, örneğin, bir kullanıcı http://example.com/index.php/videos/play/203/google-io-2009-wave-intro olarak bir URL kullanmak ve index.php almak URL (/ videos/play/203/google-io-2009-wave-intro) den kalan öğeleri ayıklamak istiyorum İlk bölüm, bu adı (videos.php da bunu play.php kullanabilirsiniz yapabilirsiniz) ile bir php dosya yüklemek ve parametreler 203 geçer ve google-io.

Bu etkili mod_rewrite kodu yeniden ama birkaç fayda var gibi aynı şeyi yapıyor:

  1. Bunu yeni iseniz çok mod_rewrite kod gerektirmez.
  2. Index.php - tek bir yerde tüm güvenlik kodunu koymanızı sağlar
  3. Bu URL'leri değiştirmek ve 404s vb işlemek için kolay

Burada gördüğünüz, mod_rewrite kullanarak URL'den index.php kaldırabilirsiniz: http://www.wil-linssen.com/expressionengine-removing-indexphp/