Php dostu URL nasıl oluşturulur?

7 Cevap php

Normalde, uygulama ya da bazı profil sayfasını görüntüleyen çok eski bir yoldur, bu gibi:

www.domain.com/profile.php?u=12345

burada u=12345 kullanıcı kimliği.

Son yıllarda, ben gibi çok güzel adresler ile bazı web bulundu:

www.domain.com/profile/12345

Ben bu PHP nasıl yapabilirim?

Sadece vahşi bir tahmin olarak, bu .htaccess dosya ile yapmak bir şeydir? Bana daha fazla ipucu veya .htaccess dosyası yazmak için nasıl bazı örnek kod verebilir misiniz?

7 Cevap

Ince makalesine bakın:

http://www.phpriot.com/articles/search-engine-urls

Bu evet, böyle bir şey görünüyor kural (bir .htaccess dosya yerleştirilen) bir mod_rewrite'ın istediğiniz açıklıyor:

RewriteEngine on
RewriteRule ^/news/([0-9]+)\.html /news.php?news_id=$1

Ve bu istekleri harita

/news.php?news_id=63

karşı

/news/63.html

Another possibility is doing it with forcetype, which forces anything down a particular path karşı use php karşı eval the content. So, in your .htaccess file, put the following:

<Files news>
    ForceType application/x-httpd-php
</Files>

Ve sonra index.php $_SERVER['PATH_INFO'] değişkeni dayalı harekete geçebilir:

<?php
    echo $_SERVER['PATH_INFO'];
    // outputs '/63.html'
?>

Geçenlerde benim ihtiyaçları için iyi çalışan bir uygulamada aşağıdaki kullanılmaktadır.

. Htaccess

<IfModule mod_rewrite.c>
# enable rewrite engine
RewriteEngine On

# if requested url does not exist pass it as path info to index.php
RewriteRule ^$ index.php?/ [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [QSA,L]
</IfModule>

index.php

foreach (explode ("/", $_SERVER['REQUEST_URI']) as $part)
{
    // Figure out what you want to do with the URL parts.
}

Bu apache mod_rewrite kullanıyor, aslında PHP değil. Ne olur bir kişi için bağlantıyı www.example.com/profile/12345 ve bu, www.example.com/profile.php?u=12345 gibi yaparak bir yeniden yazma kuralı kullanarak sonra apache pirzola o kadar, talep olduğu sunucu. Daha fazla burada bulabilirsiniz: Rewrite Guide

ModRewrite tek cevap değildir. Ayrıca $_SERVER REQUEST_URI URL her şeyi bulmak için kontrol edin o zaman. Htaccess Seçenek + MultiViews kullanmak olabilir.

Bunu yapmak için farklı yollar çok sayıda bulunmaktadır. Tek yönlü maske sorgu dize değerleri için daha önce bahsedilen RewriteRule teknikleri kullanmaktır.

Ben gerçekten sevdiğim yollarından biri front controller desen kullanırsanız, ayrıca http://yoursite.com/index.php/path/to/your/page/here gibi adresler kullanabilir ve $ _SERVER ['REQUEST_URI'] değerini ayrıştırmak değildir.

Kolayca / yolunu ayıklamak / / senin / sayfa / burada kod aşağıdaki bit bit için:

$route = substr($_SERVER['REQUEST_URI'], strlen($_SERVER['SCRIPT_NAME']));

Oradan, bunu ancak lütfen, ama Tanrı aşkına bunu sterilize emin ayrıştırmak ;)

Ben örnek aşağıdaki adım bu problem adım anlatmaya çalışacağım.

0) Question

Seni böyle sormak deneyin:

i facebook profiline www.facebook.com / kaila.piyush gibi sayfa açmak istiyor

Bu url id almak ve dosya profile.php ve onun profiline veritabanı ve gösteri kullanıcıdan featch verileri döndürmek için ayrıştırmak

normally when we develope any website its link look like www.website.com/profile.php?id=username example.com/weblog/index.php?y=2000&m=11&d=23&id=5678

şimdi biz permalink gibi www.website.com / kullanıcı adı veya example.com/weblog/2000/11/23/5678 kullanmayın yeniden değil, yeni tarzı ile güncellemek

http://example.com/profile/userid (get a profile by the ID) 
http://example.com/profile/username (get a profile by the username) 
http://example.com/myprofile (get the profile of the currently logged-in user)

1) .htaccess

. Kök klasöründe bir htaccess dosyası oluşturun veya mevcut bir güncelleme:

Options +FollowSymLinks
# Turn on the RewriteEngine
RewriteEngine On
#  Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php

O ne yapar?

Talep, gerçek bir dizin veya dosya (sunucuda var biri) için ise, index.php her url index.php yönlendirilen başka, servis değil.

2) index.php

Şimdi, biz tetiklemek için ne eylem bilmek istiyorum, bu yüzden URL'yi okumak gerekir:

Index.php:

// index.php    

// This is necessary when index.php is not in the root folder, but in some subfolder...
// We compare $requestURL and $scriptName to remove the inappropriate values
$requestURI = explode(‘/’, $_SERVER[‘REQUEST_URI’]);
$scriptName = explode(‘/’,$_SERVER[‘SCRIPT_NAME’]);

for ($i= 0; $i < sizeof($scriptName); $i++)
{
    if ($requestURI[$i] == $scriptName[$i])
    {
        unset($requestURI[$i]);
    }
}

$command = array_values($requestURI);
With the url http://example.com/profile/19837, $command would contain :

$command = array(
    [0] => 'profile',
    [1] => 19837,
    [2] => ,
)
Now, we have to dispatch the URLs. We add this in the index.php :

// index.php

require_once("profile.php"); // We need this file
switch($command[0])
{
    case ‘profile’ :
        // We run the profile function from the profile.php file.
        profile($command([1]);
        break;
    case ‘myprofile’ :
        // We run the myProfile function from the profile.php file.
        myProfile();
        break;
    default:
        // Wrong page ! You could also redirect to your custom 404 page.
        echo "404 Error : wrong page.";
        break;
}

2) profile.php

Şimdi profile.php dosyasında, biz böyle bir şey olmalı:

// profile.php

function profile($chars)
{
    // We check if $chars is an Integer (ie. an ID) or a String (ie. a potential username)

    if (is_int($chars)) {
        $id = $chars;
        // Do the SQL to get the $user from his ID
        // ........
    } else {
        $username = mysqli_real_escape_string($char);
        // Do the SQL to get the $user from his username
        // ...........
    }

    // Render your view with the $user variable
    // .........
}

function myProfile()
{
    // Get the currently logged-in user ID from the session :
    $id = ....

    // Run the above function :
    profile($id);
}

Eğer bir sığınakta webcoder bahsediyoruz gibi görünüyor.

http://en.wikipedia.org/wiki/Representational_State_Transfer

. Htaccess dosyası bir kontrolöre işaret tüm URI'ler yeniden yapar, ancak o zaman bu noktada almak istiyorsanız daha ayrıntılı. Sen Recess bakmak isteyebilirsiniz

PHP tüm bir sığınakta çerçevesi bulunuyor