En liten howto. Alternativ till ?page=foo.

Permalänk
Medlem

En liten howto. Alternativ till ?page=foo.

Här följer ett exempel på hur man kan omvandla adresser i stil med http://www.dinsida.com?page=foo till http://www.dinsida.com/foo. Fördelarna är att du får snyggare och mer sökmotoroptimerade adresser.

Exemplet förutsätter att du kör PHP på en apache-server med stöd för mod_rewrite.

1. Skapa en .htaccess-fil i roten med följande innehåll:

DirectoryIndex engine.php RewriteEngine on RewriteRule ^([^/\.]+)$ engine.php?page=$1

2. Skapa engine.php med följande innehåll:

<?php // Här kanske du vill inkludera en header som visas på varje sida. // require 'header.php'; require $_GET['page'].'.php'; // require 'footer.php';

3. Skapa de sidor du vill ha på webbplatsen.

Visa signatur

"'We're pro-life.' Eww, you look it! You look like you're filled with life."
UNIX man pages online, GNU/Linux-schemaprogram för LiU

Permalänk
Medlem

Kort och informativ! Mycket bra initiativ.

Permalänk
Medlem

Här kommer en variant på Piltvenoms lösning. Den här bör fungera på samtliga php-stödda miljöer.

engine.php:

<?php $defaultRedirectPage = "http://www.google.se"; if( !isset($_SERVER["PATH_INFO"]) ) { header("Location: ".$defaultRedirectPage); exit; } $allowedSubPages = array("page1.php","page2.php","secret.php"); //Remove initial slash $requestedSubPage = substr($_SERVER["PATH_INFO"],1); //Valid sub page? if( array_search($requestedSubPage, $allowedSubPages) === FALSE) { header("Location: ".$defaultRedirectPage); exit; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Common title</title> </head> <body> <?php include( $requestedSubPage ); ?> </body> </html>

Det gör att du i efterhand kan skriva http://dinsida.com/engine.php/page1.php . Inte riktigt lika snyggt, men du får fortfarande ut grundpoängen, att bli mer sökmotorvänlig, dessutom så behöver man ju inte sätta huvuden för cachning (default blir ju att cacha nu).

//C

Permalänk

Tack! Det här letade jag efter precis ..!

Visa signatur

Microsoft Longhorn operating system is going to be Windows Vista. As in “a view into the distance” which surely refers to the prolonged development timeline of the OS

Permalänk
Medlem

Jag kommer inte in på http://www.dinsida.com/foo!!! ne skoja bara... hehe
Men bra skrivet!!!

Visa signatur

I want to believe that the truth is out there!!
But it's hard when i know we never gonna find it!!

Permalänk
Medlem

Mycket trevligt att du lade ut scriptet så här! Men jag har stött på problem..

Jag vill alltså kunna använda mitt vanliga include-script, men när jag testar den här mod_rewriten så inkluderas inte filen, utan istället visas själva PHP-filen. Hur ska man kunna lösa det?

Visa signatur

What is your spaghetti policy around here?

Permalänk

Varför är http://www.dinsida.com?page=foo mer "mer sökmotoroptimerad" än http://www.dinsida.com/foo ? Snyggare kan jag hålla med om, men det andra hänger jag inte med i

Visa signatur

"I must digest this information"

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Endless Nameless
Varför är http://www.dinsida.com?page=foo mer "mer sökmotoroptimerad" än http://www.dinsida.com/foo ? Snyggare kan jag hålla med om, men det andra hänger jag inte med i

De på Zend har skrivit en schysst artikel inom ämnet. Du finner den här.

Citat:

What's wrong with the GET method

The GET method of transferring parameters between Web pages is by far the simplest method. It is particularly useful for passing parameters from within HREF tags. For example, assume you have a set of articles on your Web site and a single script that displays the articles in the desired fashion.

If you wanted to provide a simple hyperlink using <A HREF> to a particular article, you would need to pass the script a parameter telling it which article you would like to view using the GET convention. Unfortunately, Web spiders generally ignore hyperlinks that include parameters in the URL. This means that the page which the hyperlink points to -- as well as all pages referenced by it -- will be ignored by the Web spider indexing your site.

Visa signatur

"'We're pro-life.' Eww, you look it! You look like you're filled with life."
UNIX man pages online, GNU/Linux-schemaprogram för LiU

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Endless Nameless
Varför är http://www.dinsida.com?page=foo mer "mer sökmotoroptimerad" än http://www.dinsida.com/foo ? Snyggare kan jag hålla med om, men det andra hänger jag inte med i

Tvärtom, http://www.dinsida.com/foo är mer sökmotoroptimerad än http://www.dinsida.com/?page=foo.

Anledningen är frågetecknet. Frågetecknet skiljer ju av i URL:en vart själva källan är och vart INDATA till källan börjar. Eftersom frågetecknet indikerar att datat som kommer visas är dynamiskt så kan man dra vissa antaganden därifrån. Webbläsare brukar till exempel INTE cacha sidor som har ett ? i sig, då det är dynamiskt innehåll, vilket oftast är rätt beteende. Sökmotorer kan ju göra samma antagande, då datat är dynamiskt så finns det ju ingen anledning att indexera något som kommer förändras varje gång man går in. Det skulle ju då bli negativa träffar.

//C

EDIT: Tog bort ett felaktigt påstående.

Permalänk
Medlem

Med den förstnämnda lösningen får jag 403 Forbidden error då jag försöker komma åt sidan :/

Det har nåt att göra med RewriteEngine on raden att göra för om jag tar bort den raden så funkar det...

MVH
// Kevin

Visa signatur

Mycket mumbo-jumbo nu känner jag.

Permalänk
Medlem

Någon som vet någon liknande lösning för ASP?

Visa signatur

Stationär » Amd Athlon64 X2 4800+ | Asus M2N-Sli Deluxe | 2048mb ram | BFG 8800GTS OC 320mb | Hiper Type-R Modular 580w Black | WD Raptor 74gb + 200gb + 250gb + 250gb + 500gb

Permalänk
Citat:

Ursprungligen inskrivet av Piltvenom
De på Zend har skrivit en schysst artikel inom ämnet. Du finner den här.

Citat:

Ursprungligen inskrivet av conio
Tvärtom, http://www.dinsida.com/foo är mer sökmotoroptimerad än http://www.dinsida.com/?page=foo.

Anledningen är frågetecknet. Frågetecknet skiljer ju av i URL:en vart själva källan är och vart INDATA till källan börjar. Eftersom frågetecknet indikerar att datat som kommer visas är dynamiskt så kan man dra vissa antaganden därifrån. Webbläsare brukar till exempel INTE cacha sidor som har ett ? i sig, då det är dynamiskt innehåll, vilket oftast är rätt beteende. Sökmotorer kan ju göra samma antagande, då datat är dynamiskt så finns det ju ingen anledning att indexera något som kommer förändras varje gång man går in. Det skulle ju då bli negativa träffar.

//C

EDIT: Tog bort ett felaktigt påstående.

Läste lite tokigt då och tvärtom då (skyller på ginet).
Fast då funderar jag på varför man inte cachar adresser med ? i sig. För rätt ofta så är de "ganska" statiska ändå. Ta t.ex den här tråden då kommer antagligen de översta inläggen innan det här inlägget att förbli oförändrade. De inläggen kommer (förhoppningsvis) att innehålla matnyttigt för de som googlar.

Visa signatur

"I must digest this information"

Permalänk
Medlem

För mig funkade det, dock inte med det som visades upp här.

.htaccess:

RewriteEngine On RewriteBase / RewriteRule !.(gif|jpg|png|css)$ index.php

index.php (där sidorna ska inkluderas):

<?PHP if (file_exists($_SERVER['DOCUMENT_ROOT'] . $_SERVER['REQUEST_URI']) and ($_SERVER['SCRIPT_FILENAME'] != $_SERVER['DOCUMENT_ROOT'] . $_SERVER['REQUEST_URI']) and ($_SERVER['REQUEST_URI'] != "/")){ include($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']); die; } $uri = strip_tags($_SERVER['REQUEST_URI']); $uri_array = explode("/",$uri); array_shift($uri_array); switch ($uri_array[0]) { case "start": include 'start.php'; break; case "about": include 'about.php'; break; } ?>

Det enda jobbiga är att man måste lägga till varje undersida i switchen, men det skulle säkert gå att lösa med en if($uri_array[0])-sats. Ska testa det senare.

Visa signatur

What is your spaghetti policy around here?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av T.D!

Det enda jobbiga är att man måste lägga till varje undersida i switchen, men det skulle säkert gå att lösa med en if($uri_array[0])-sats. Ska testa det senare.

Du kan ju använda koden som jag hade i mitt exempel, dvs med en array som innehåller alla tillåtna sidor. Blir enklare än en lång och hårig if/switch-sats.

//C

Permalänk
Medlem

Men det skulle ju vara ännu bekvämare ifall man inte behövde skriva någonting alls.

Visa signatur

What is your spaghetti policy around here?

Permalänk
Medlem

Tjo!

Här kommer en variant på mitt exempel ovan. Den är anpassad ifall man vill ha själva templatemotorn som index.php.

<?php $defaultRedirectPage = "http://www.google.se"; $requestedSubPage = null; if( !isset($_SERVER["PATH_INFO"]) ) { //Default main content $requestedSubPage = '_index.php'; } else { //Remove initial slash $requestedSubPage = substr($_SERVER["PATH_INFO"],1); } $allowedSubPages = array("_index.php", "page1.php","page2.php","secret.php"); //Valid sub page? if( array_search($requestedSubPage, $allowedSubPages) === FALSE) { header("Location: ".$defaultRedirectPage); exit; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Common title</title> </head> <body> <div class="maindiv"> <?php include( $requestedSubPage ); ?> </div> <div class="footer">Cool site with cool template engine</div> </body> </html>

//C