wake-up-neo.com

Wie erstelle ich eine freundliche URL in PHP?

Normalerweise sieht die Vorgehensweise zum Anzeigen einer Profilseite wie folgt aus:

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

dabei ist u=12345 die Benutzer-ID.

In den letzten Jahren habe ich eine Website mit sehr netten URLs gefunden, wie:

www.domain.com/profile/12345

Wie mache ich das in PHP?

Hat das etwas mit der .htaccess - Datei zu tun? Können Sie mir weitere Tipps oder einen Beispielcode zum Schreiben der Datei .htaccess Geben?

63
Peter

Laut diesem Artikel möchten Sie einen mod_rewrite (in einem .htaccess Datei) Regel, die ungefähr so ​​aussieht:

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

Und diese kartiert Anfragen von

/news.php?news_id=63

zu

/news/63.html

Eine andere Möglichkeit besteht darin, dies mit forcetype zu tun, was alles auf einem bestimmten Pfad dazu zwingt, PHP zu verwenden, um den Inhalt auszuwerten. Also, in Ihrem .htaccess Datei, geben Sie Folgendes ein:

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

Und dann kann die index.php basierend auf dem $_SERVER['PATH_INFO'] Variable:

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

Ich habe kürzlich Folgendes in einer Anwendung verwendet, die gut für meine Bedürfnisse geeignet ist.

.zugang

<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.
}
28
Jordan S. Jones

Ich versuche, dieses Problem anhand des folgenden Beispiels Schritt für Schritt zu erklären.

) Frage

Ich versuche dich so zu fragen:

ich möchte eine Seite wie das Facebook-Profil www.facebook.com/kaila.piyush öffnen

er erhält die ID von der URL und parst sie in die Datei profile.php. Er gibt die Daten aus der Datenbank zurück und zeigt den Benutzer seinem Profil an

wenn wir eine Website entwickeln, sieht der Link normalerweise wie folgt aus: www.website.com/profile.php?id=username example.com/weblog/index.php?y=2000&m=11&d=23&id=5678

jetzt aktualisieren wir mit neuem Stil, nicht umschreiben. Wir verwenden www.website.com/username oder example.com/weblog/2000/11/23/5678 als Permalink

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

Erstellen Sie eine .htaccess-Datei im Stammordner oder aktualisieren Sie die vorhandene Datei:

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

Was macht das

Wenn es sich bei der Anfrage um ein echtes Verzeichnis oder eine echte Datei handelt (eine, die auf dem Server vorhanden ist), wird index.php nicht bereitgestellt, andernfalls wird jede URL zu index.php umgeleitet.

2) index.php

Nun wollen wir wissen, welche Aktion ausgelöst werden soll, also müssen wir die URL lesen:

In 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

Jetzt sollten wir in der profile.php-Datei so etwas haben:

// 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);
}
14
Piyush

Einfacher Weg, dies zu tun. Versuchen Sie diesen Code. Fügen Sie Code in Ihre htaccess -Datei ein:

Options +FollowSymLinks

RewriteEngine on

RewriteRule profile/(.*)/ profile.php?u=$1

RewriteRule profile/(.*) profile.php?u=$1   

Es wird diese Art hübsche URL erstellen:

http://www.domain.com/profile/12345/

Für mehr Zugriff Pretty URL: http://www.webconfs.com/url-rewriting-tool.php

8
Hemal Halari

Es ist eigentlich kein PHP, sondern Apache mit mod_rewrite. Was passiert, ist, dass die Person den Link www.example.com/profile/12345 anfordert und Apache ihn dann mit einer Umschreiberegel auflöst, so dass er wie folgt aussieht: www.example.com/profile.php?u=12345 Server. Weitere finden Sie hier: Rewrite Guide

4
jacobangel

Mod_Rewrite ist nicht die einzige Antwort. Sie können auch Optionen + Mehrfachansichten in .htaccess verwenden und dann $_SERVER REQUEST_URI Markieren, um alles zu finden, was in der URL enthalten ist.

0
empi

Es gibt viele verschiedene Möglichkeiten, dies zu tun. Eine Möglichkeit besteht darin, die zuvor erwähnten RewriteRule-Techniken zu verwenden, um Abfragezeichenfolgenwerte zu maskieren.

Eine der Möglichkeiten, die ich wirklich mag, ist, wenn Sie das Front Controller - Muster verwenden, können Sie auch URLs wie http://yoursite.com/index.php/path/to/your) verwenden/page/here und analysiere den Wert von $ _SERVER ['REQUEST_URI'].

Sie können das/path/to/your/page/here-Bit einfach mit dem folgenden Code extrahieren:

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

Von dort aus können Sie es nach Belieben analysieren, aber um Himmels willen, stellen Sie sicher, dass Sie es desinfizieren;)

0
Shabbyrobe