URL PHP MVC Çerçevesinde Yeniden Yazma

4 Cevap php

I have made my own custom php framework which implements MVC design pattern. In it, all URLs are constructed like this

mysite.com/index.php?route=controller/function/parameters/go/here
mysite.com/index.php?route=products/shirts/99

vb

I have put in place htaccess to remove index.php?route= part from URLs to make them more SEF making them appear like this:

mysite.com/controller/function/parameters/go/here
mysite.com/products/shirts/99

Ben sadece bu yüzden gibi her URL'nin sonunda bir sonek eklemek istiyorum:

mysite.com/controller/function/parameters/go/here.html
mysite.com/products/shirts/99.html

Probably htaccess can be put to use for acheiving that or possibly some other solutions.

Herhangi bir fikir lütfen?

Şimdiden teşekkürler.

4 Cevap

Ben o zaman bir olsun var ya da 'yol' için yeniden isteği ile index.php onları yeniden 'güzel' adresler alıyorsun varsayalım.

Eğer ileride koşacağız bazı sorunlar vardır, biri (Ben benzer bir kavram sene önce ile ilgili hatırlamak) isteği olsun değişkenler ile başa çıkmak için nasıl olacak.

Şahsen, ben sadece kurulum önyükleme / index.php dosyasına geçerli dosya / dizinleri olmayan tüm istekleri göndermek için. Htaccess olur. Sonra bir aşırı karmaşık mod_rewrite, PHP ayrıştırma yapmak. You're already parsing the 'route' get var, why not just parse the whole request?

: Bu noktada dosyada index.php sizin ilk adımı olacaktır

  • Çıkarın. uzantısı (veya html / xml / json / vb istek tanımlamak)
  • Taban URL her türlü çıkarın.
  • Eğer rota olsun VAR yapmak gibi kalan ayrıştırın.

Ben doğru anlamak, size rota kaldırmak için htaccess kullanılan söylüyorlar = ve ayrıca bir. Html ekini kaldırmak istiyorum. Ben bunu yanlış şekilde yaklaşıyor düşünüyorum.

Ben tüm tercih URL'leri app işaret eden bağlantılar ve daha sonra htaccess rotada koyduk = ve index.php unsurları olurdu

Yani bir bağlantı bu gibi görünüyor:

<a href="mysite.com/controller/function/parameters/go/here.html" />

ve Nicky ton benzer bir htaccess kuralı haline dönüştürmek olduğunu kullanabilirsiniz:

mysite.com/index.php?route=controller/function/parameters/go/here.html

Aslında Nicky cezası çalışacaktır. . Bence PHP kolay - Sen index.php kodu veya htaccess kural html eki kaldırma seçeneğiniz vardır.

. Eğer htaccess kullanarak html kaldırmak istiyorsanız o zaman bu muhtemelen çalışacaktır (denenmemiş):

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)\.html$ index.php?route=$1 [QSA,L]
</IfModule>

Diğerleri gibi, ben iliştirme senin çerçevesinde gerçekleşmesi gerektiğini düşünüyorum.

I imagine that you have a function like: $html->link('products/shirts/99');

Bu işlev '. Html' eklemek gerekir.

Sizin url işleyicisi gibi görünmelidir:

/ / $ Sorgu products/shirts/99.html

$l = explode ($query, '/'); $last = length($l); $l[$last-1] = substring($l[$last-1] , find($l[$last-1] ,'.html')) //I am doing the args from memory so please check them.

Bu CakePHP'nin index.php modifiye olacağını nasıl. Ben bir rehber olarak bu kodu bakmak öneririz.

Ben bir uzman değilim ama bu deneyin:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?route=$1 [QSA,L]
</IfModule>