Normalerweise sieht die Praxis oder sehr alte Art der Anzeige einer Profilseite folgendermaßen aus:
www.domain.com/profile.php?u=12345
Wo u=12345
ist die Benutzer-ID?
In den letzten Jahren habe ich eine Website mit sehr schönen 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 .htaccess
Datei geben?
quelle
James Socol
und geposteten LinksChad Birch
sind defekt.Ich habe kürzlich Folgendes in einer Anwendung verwendet, die für meine Anforderungen gut funktioniert.
.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. }
quelle
Ich versuche dieses Problem Schritt für Schritt im folgenden Beispiel zu erklären.
0) Frage
Ich versuche dich so zu fragen:
Ich möchte eine Seite wie das Facebook-Profil www.facebook.com/kaila.piyush öffnen
Es erhält eine ID von der URL und analysiert sie in der Datei profile.php. Es gibt featch-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 und schreiben nicht neu. 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:
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 Anforderung um ein echtes Verzeichnis oder eine 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
Jetzt möchten wir wissen, welche Aktion ausgelöst werden soll, und müssen daher 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 in der Datei profile.php sollten wir ungefähr 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); }
quelle
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:
Für mehr htaccess Hübsche URL: http://www.webconfs.com/url-rewriting-tool.php
quelle
Es ist eigentlich kein PHP, es ist Apache mit mod_rewrite. Was passiert, ist, dass die Person den Link www.example.com/profile/12345 anfordert und Apache ihn dann mithilfe einer Umschreiberegel zerlegt, sodass er wie folgt aussieht: www.example.com/profile.php?u=12345 Server. Weitere Informationen finden Sie hier: Rewrite Guide
quelle
ModRewrite ist nicht die einzige Antwort. Sie können auch Optionen + MultiViews in .htaccess verwenden und dann überprüfen
$_SERVER REQUEST_URI
, ob alles in der URL enthalten ist.quelle
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.
Wenn Sie das Front-Controller- Muster verwenden, können Sie auch URLs wie http://yoursite.com/index.php/path/to/your/page/here verwenden und den Wert von $ _SERVER analysieren ['REQUEST_URI'].
Sie können das Bit / path / to / your / page / here einfach mit dem folgenden Codebit 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;)
quelle
Es sieht so aus, als würden Sie von einem RESTful-Webservice sprechen.
http://en.wikipedia.org/wiki/Representational_State_Transfer
Die .htaccess-Datei schreibt alle URIs neu, um auf einen Controller zu verweisen. Dies ist jedoch detaillierter, als Sie an dieser Stelle erhalten möchten. Vielleicht möchten Sie sich Recess ansehen
Es ist ein RESTful-Framework in PHP
quelle