Statik URL içine dinamik bir URL açmak nasıl

5 Cevap php

I am developing a website using PHP and Apache. I wanna turn my URLs from

www.example.com/book.php?book=title

Bu gibi bir şey içine, tabii mümkünse:

www.example.com/book/title

Kitap başlığı benzersiz ve tekrar edilemez dikkat edin.

I`ve read about this, but none of the posts were clear enough for a beginner like me. Do you guys know any tutorial that explains that?

Teşekkürler.

5 Cevap

Biraz Rodolphe adlı @ ve Galen'in cevaplarda @ üzerinde genişleyen.

Url yeniden yazma için ihtiyaçları sınırlı ise, bir .htaccess Rodolphe adlı örnekte açıklandığı kuralları ile kodlanmış güzel yapacağız.

Galen anlaşılacağı gibi Ancak, sizin ihtiyaçlarınıza bilinmeyen olabilir, ya da siz onları çalışma var bir kere, sizin yeniden kurallarını dokunmaya gerek kalmadan, daha sonra onlara genişletmek isteyebilirsiniz.

Bunu yapmak için yaygın bir şekilde www.host.com/controller/action/parameter bir URL şemasında etrafında uygulamanızı tasarlamaktır. Böyle bir URL bir örnek daha sonra, dahili çeşitli şekillerde ele alınması düşüren www.host.com/book/view/1 olabilir.

1)

Her denetleyici için ayrı komut dosyaları var. Daha sonra varsayılan denetleyici olmayan eşleşen veya geçerli olmayan istekleri yönlendirerek, forma $controller.php?action=$action&param=$param her isteğini yeniden.

# Serve files and directories as per usual,
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d

# If the request uri doesn't end in .php
# and isn't empty, rewrite the url
RewriteCond %{REQUEST_URI} !.php$
RewriteCond %{REQUEST_URI} !^$
# Try matching against a param request first
RewriteRule (.*?)/(.*?)/(.*?) $1.php?action=$2&param=$3 [L]
# If it didn't match, try to match an action
RewriteRule (.*?)/(.*?) $1.php?action=$2 [L]

# redirect all other requests to index.php,
# your default controller
RewriteRule .* index.php [L]

2)

Eğer her isteğini yönlendirmek tek bir giriş noktası (ya da bir ön denetleyicisi) var, ve bu ön kontrolör uygun denetleyiciye isteği yönlendirerek işler.

# Redirect all requests that isn't a file or 
# directory to your front controller
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule .* index.php [L]

Jenerik dönüş kuralları varsayılan / ön denetleyicisi herhangi Parametes ekler olmaz. Bir dahili yönlendirme olduğundan Ancak, ne yaptığını ne olması gerektiğini belirlemek için PHP REQUEST_URI erişimine sahip olacaktır.

Bu, doğal olarak, tek seçenek değildir. Sadece çorba benim 2 sent biraz daha heyecan.

Disclaimer: All of the above rewrite rules (as well as everything else, of course) are written straight off the top of my head (after a few beers) and haven't been tested anywhere.

Benim web sayfası gibi statik biçimde bir iç bağlantı, "http://www.example.com/casestudy/34" oluşturduk.

. Ve ben htaccess dosyasına aşağıdaki kod yazdım:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule ^casestudy/([^-]+) /casestudy_details.php?id=$1 [R=301,QSA,L]

Aradığınız özelliği 'url yeniden yazma "denir.

You can do it manually : you explain the pattern using regular expression, and the webserver translates the requests. With Apache it's commonly found under htaccess files, or directyl in the httpd.conf. see official doc. here : http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Bu kurulumu kolay olsa da, özellikle düzenli ifadeler hata ayıklama "o" değil.

Sorununuzla ilgili olarak, böyle bir kural deneyin:

RewriteEngine on 
RewriteRule ^book/(.*)$ book.php?book=$1 [L]

Another option, would be to use a php framework : most of time, this feature is built-in. You have to "learn" though how to use the framework. If your website is already finished, this is not the best option...

İşte yolu Kohana (ve php çerçeveler 99.99%) yapar

Bir. Htaccess dosyası ekleyin (apache kullanıyorsanız)

# Turn on URL rewriting
RewriteEngine On

RewriteBase /

# 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/URL
RewriteRule .* index.php/$0 [PT,L]

Bu index.php tüm adresler yönlendirir. index.php url dayalı komut yükler ön denetleyicisi çeşit olacak

Sizin örnekte:

localhost / kitap / title

index.php yüklenmiş olacaktır. Bu url gitmek ve aslında tüm işi yapacak yüklemek için sayfasını (kontrolör) olacaktı. Bu durumda, belki books.php. books.php url kitabın başlığını almak ve daha sonra bir veritabanı arama veya o isimde vardır ne yapardı.

Çoğu çözüm mod_rewrite güveniyor. See here örnekler için.