PHP kullanarak URL'leri ayrıştırma

4 Cevap php

Ben benzer bir soru attılar here. Ancak, bunu yapmak için ne tavsiye alma hakkında daha fazla idi. Şimdi ne yapacağımı biliyorum, bunu yapmak için nasıl küçük bir yardım arıyorum!

Temelde hemen hemen% 100 dinamik bir web sitesi var. Tüm web sitesi bağlantıları PHP kullanılarak oluşturulan ve tüm sayfaları php yukarı / kod içerir yapılır. Ben (diğer soru belirtildiği gibi) URL'leri iyileştirilmesi ve ben biraz mücadele ediyorum tarafından sitenin SEO geliştirmek için çalışıyorum.

Ben sunucu üzerinde çirkin URL'ler için güzel adresler yeniden yazma mod_rewrite kullanıyorum. Yani ne gerek şimdi güzel URL'ler için (sayfalarında php kod üretilir) çirkin adresler dönüştürülmesidir.

İşte (bu, diğer bir soru lutfen vardır) ayrıştırmak için gereken URL'ler:

/index.php?m=ModuleType
/index.php?m=ModuleType&categoryID=id
/index.php?m=ModuleType&categoryID=id&productID=id
/index.php?page=PageType
/index.php?page=PageType&detail=yes

İşte yukarıdaki URL'ler için ayrıştırılması istiyorum budur:

/ModuleType
/ModuleType/CategoryName
/ModuleType/CategoryName/ProductName
/PageType
/PageType/Detail

Gumbo tarafından yayınlanan diğer soru üzerine bir örnek, ancak ben bunu yaptığını tam olarak ne biraz dağınık ve belirsiz olduğunu hissettim vardır.

Birisi bana bu sorunu çözmeye yardımcı olabilir mi?

Şimdiden teşekkürler.

4 Cevap

Seni yeniden tüm URL'yi yaptık ... Ben ne peşinde görüyorum, ama sayfaları arasındaki tüm bağlantıları eski URL sözdizimi kullanıyorsunuz.

Bunu etrafında görebilirsiniz tek yolu regex arama çeşit yapmak ve yeni bir sözdizimi kullanın böylece bağlantıları değiştirmektir. Bu, tüm bağlantıları dinamik olarak oluşturulur ise biraz daha karmaşık olacaktır, ama umarım yapmak için bu çok fazla olmaz.

Linkler şu anda üretilen nasıl görmeden, kodunu değiştirmek için nasıl söylemek zor. Ben olsa böyle bir şey hayal çalışır:

<?php echo "<a href='/index.php?m=$ModuleType&categoryID=$id'>"; ?>

Yani bu değiştirmek istiyorum:

<?php echo "<a href='$ModuleType/$id'>"; ?>

Üzgünüm, sadece kafamın üst kapalı sözdizimi hataları yaptık eğer ...

Ben sorunuzu yanlış sürece, "çirkin" URL'leri, PHP komut onlarla denir ayrıştırmak değil, bu yüzden $_GET[] sizin parametreleri (m, categoryID, ProductID) ve yapmak için bunları birleştirmek sizin (sadece mantık biraz bir parametre olup olmadığını görmek ve dizeleri bitiştirmek için) çok zor olmamalı güzel URL'ler,.

Sen doğru sayfaya URL sevk edecek bir ön denetleyicisi, ihtiyacınız olacak.

  1. Yazılı bir şey index.php yönlendirilecek böylece Apache,. Htaccess kuralları kullanarak URL yeniden yazmak olacak? Q =. Örneğin, yazarak http://example.com/i/am/here index.php bir çağrıya sebep olur? Q = / i / am / burada
  2. Index.php ["q"] $ _GET den yolu ayrıştırmak ve ne karar verecek. Örneğin, bir sayfa içerebilir, ya da, veritabanına gidin yolunu aramak, uygun içerik almak ve çıktısını

. Tam olarak bunu yapacak bir htaccess çalışan bir örnek istiyorsanız (? Ile q index.php yönlendirme = yol) drupal yapar nasıl bir göz atın:

http://cvs.drupal.org/viewvc.py/drupal/drupal/.htaccess?revision=1.104

Palantir bu mod_rewrite ve. Htaccess kullanılarak yapılır yazdığı gibi. Doğru yeniden yazma koşullarını senin. Htaccess içine almak için bir Mod Rewrite Jeneratör bakmak isteyebilirsiniz (örneğin, http://www.generateit.net/mod-rewrite/). Bu çok daha kolay hale getirir.