Archief - url rewriting

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

sarnath

Legacy Member
Hallo,

Ik ben eindelijk ook eens begonnen aan het omzetten van mijn site naar url rewriting, het verloopt echter nogal moeilijk terwijl het niet zo moeilijk zou moeten zijn dus ik doe wrs ergens iets onnozel fout.

Ik installeer het in apache2 en php5 op ubuntu.

Hier is wat ik doe:
1. Activeren van de module:
sudo a2enmod rewrite

2. Opvragen van phpinfo om te kijken of de module geactiveerd is:
Loaded Modules core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_rewrite mod_setenvif mod_status

3. Onderstaande geplaatst in mijn apache2.conf (stond in een tutorial)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/(.*) http://localhost:8080/$1 [P]
</IfModule>

4. Vervolgens maak ik een .htaccess file aan waarin ik het volgende zet:

RewriteEngine On
RewriteBase /
RewriteRule ^nieuws/ nieuws.php
RewriteRule ^nieuws/artikel/(.*)/$ nieuwsbericht.php?id=$1


Er gebeurt echter niets...

Mijn structuur is als volgt:
in /var/www staan mijn sites dus var/www/site1, var/www/site2 enz....

Wat doe ik fout?

Spacy2003

Legacy Member
RewriteEngine On
RewriteBase /
RewriteRule ^nieuws/$ nieuws.php
RewriteRule ^nieuws/artikel/(.*)/$ nieuwsbericht.php?id=$1

Probeer het zo eens (bij mijn weten is stap 3 helemaal niet noodzakelijk) :)

Curahee Q

Legacy Member
RewriteRule ^nieuws/artikel/([0-9]+)/$ nieuwsbericht.php?id=$1

dJeez

Legacy Member
Heb je apache wel herstart nadat je de rewrite rules hebt ingesteld? En staat voor de folder waarin je die .htaccess hebt gezet de AllowOverride functie wel aan? Want anders gaat apache de .htaccess uiteraard niet lezen.

Tenslotte : mijnwebsite/nieuws is uiteraard niet hetzelfde als nieuws... Dus corrigeer je rewrite rules maar (door mijnwebsite/ toe te voegen).

BTW Die eerste rewrite rule die herschrijft naar localhost:8080 lijkt mij absurd en totaal niet nodig, maar is afhankelijk van wat er verder in je config staat uiteraard...

sarnath

Legacy Member
Restart heb ik gedaan ja :)

In de apache2.conf heb ik het volgende nog toegevoegd:

<Directory "/var/www/mijnwebsite/">
AllowOverride All
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>

Mijn .htaccess staat in de map "mijnwebsite" waarin ook nieuws.php en nieuwsbericht.php staat, dus dan is mijn rule toch correct?
Ik bedoel dus dat ik volgens de manier werk die hier wordt uitgevoerd: PHPhulp - PHP tutorials - Overige - Mod Rewrite

Wat die localhost:8080 betreft, dat kan, dat heb ik ergens online gezien dat je dat kon proberen, maar het is wrs overbodig idd.

Spacy2003

Legacy Member
Mijn test omgeving even voorstellen waarbij het werkt.
Ik heb een map genomen (andere projectjes enzo) als base maar dit zou even goed in de root moeten werken.
(Ook iemand zo een vreemde reflex om een zin af te sluiten met puntkomma ? :unsure:)

Instellingen van Apache:

Rewrite_mod laden
Vooral niets doen in httpd.conf (je kan hier flink mee knoeien, trust me :p)

Mappenstructuur:

Root
+urlrewrite
- nieuws.php
- .htacces

.htacces bevat:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /urlrewrite
RewriteRule ^nieuws/artikel/(.*)$ nieuws.php?artikel=$1

Inhoud van nieuws.php

<?php
//GET variabele met het ID van het artikel
if(isset($_GET["artikel"]) && !empty($_GET["artikel"])){
echo "<h1>Dit is artikel " . $_GET["artikel"] . "</h1>";
}else{
echo "<h1>Geen artikel gevonden</h1>";
}
?>

Curahee Q

Legacy Member
Waarom gebruik je trouwens (.*)? Dat wil zeggen dat ook al de niet numerieke karakters worden aangenomen. Ik zou daar gewoon zetten ([0-9]+). Extra beveiliging lijkt me, never trust a user imo.

sarnath

Legacy Member
@Spacy2003
Bedankt voor je voorbeeld, heb nog enkele vragen voor de zekerheid:
Mijn hddpd.conf is leeg en volgens tutorials moet ik wijzigingen doen in apache2.conf

Mappenstructuur:

Root
+urlrewrite

Root is bij mij /var/www/mijnwebsite

wat bedoel je precies met +urlrewrite? Is dit een regel in de httpd.conf (of apache2.conf)
In tutorials zeggen ze in ieder geval dat je wel de configfile moet aanpassen om te kunnen overriden:
<Directory "/var/www/mijnwebsite/">
AllowOverride All
</Directory>

Het is in ieder geval geladen, want het staat bij de modules als ik php info opvraag en mijn .htaccess klopt ook, dus ik moet ergens anders iets fout doen.

Curahee Q zei:
Waarom gebruik je trouwens (.*)? Dat wil zeggen dat ook al de niet numerieke karakters worden aangenomen. Ik zou daar gewoon zetten ([0-9]+). Extra beveiliging lijkt me, never trust a user imo.

Goede opmerking, ik ga dit idd zeker goed overlopen alvorens het in productie te zetten.

sarnath

Legacy Member
Heb het gefixt, gewoon opnieuw alles ingesteld en nu werkte het :s, k zou niet weten wat ik anders heb gedaan maar soit.

Nu zit ik met een ander prob:

Op de productieserver doe ik hetvolgende:
RewriteRule ^nieuws/$ nieuws.php
RewriteRule ^nieuws/(.*)/$ nieuwsbericht.php?id=$1
RewriteRule ^nieuws/([0-9]+)/([a-zA-Z0-9_-]+)\.html$ nieuwsbericht.php?id=$1

dit werkt prima, op mijn testserver gaat hij echter altijd naar nieuws.php.
Als ik nieuws.php even verander in nieuwss.php ofzo dan werkt het prima en gaat hij bij een url wel naar nieuwsbericht.php

De url is dan als volgt:
http://localhost/nieuws/ (nieuws.php met per pagina een korte samenvatting van 5 artikels)
http://localhost/nieuws/1261482479/de-titel-van-het-bericht.html voor het artikel (nieuwsbericht.php)

Iemand een idee.
Bedankt voor jullie hulp totnutoe alvast!

sarnath

Legacy Member
adrianhates zei:
ik weet niet direct een oplossing voor uw probleem maar:

Waarom gebruikt iedereen rewriting op deze manier?

http://localhost/nieuws/112434/artikelblablalba/

Dit is toch een pak beter?

http://localhost/nieuws/artikel-bablabla/

je moet gewoon je titel strippen en tussen elk woord een streepje zetten en dit gebruiken als referentie naar uw database ipv een id.

Omdat je altijd een unieke id als referentie moet gebruiken?
Zoals jij zegt ga je toch in de database zoeken op string?
Wat als je dan na een jaar ofzo eenzelfde artikeltitel hebt?

adrianhates

Legacy Member
sarnath zei:
Wat als je dan na een jaar ofzo eenzelfde artikeltitel hebt?

1. Je kan je titel als uniek definieren wat ook logisch is..
2. Als je dit niet doet heb je duplicate content en ben je niet goed bezig.

sarnath

Legacy Member
adrianhates zei:
1. Je kan je titel als uniek definieren wat ook logisch is..
2. Als je dit niet doet heb je duplicate content en ben je niet goed bezig.

Als je bijvoorbeeld in 2008 een titel hebt "audi stelt nieuwe A8 voor" en dit 3 jaar later weer hebt?
Dat zie ik op zovele sites, lijkt mij toch niet fout of ben ik mis?

adrianhates

Legacy Member
sarnath zei:
Als je bijvoorbeeld in 2008 een titel hebt "audi stelt nieuwe A8 voor" en dit 3 jaar later weer hebt?
Dat zie ik op zovele sites, lijkt mij toch niet fout of ben ik mis?

Je bent niet mis.. Het is de manier waarop het verschilt. Alleen lijkt mijn manier het beste voor SEO.

sarnath

Legacy Member
kan zijn, ik heb te weinig kennis om hierover te oordelen, maar maakt het dan zoveel verschil of je daar nog een / extra hebt dan?

volgende drie voorbeelden zie ik toch op massa's sites alldrie evenveel gebruikt worden:

http://localhost/nieuws/112434/artikelblablalba/
http://localhost/nieuws/artikel-bablabla/
http://localhost/nieuws/112434-artikelblablalba/

Ik dacht gewoon dat SEO bedoelt was om URL's te zoeken in een URL zullen we maar zeggen, en dat het dus niet uitmaakte of je daar nog 10 slashes met tekst of nummering voor had staan.


anyway we dwalen af, weet echt niemand waarom het online wel werkt en lokaal niet?
het klopt toch wat ik in mijn file zet of niet?

RewriteRule ^nieuws/$ nieuws.php
RewriteRule ^nieuws/(.*)/$ nieuwsbericht.php?id=$1
RewriteRule ^nieuws/([0-9]+)/([a-zA-Z0-9_-]+)\.html$ nieuwsbericht.php?id=$1

zolang er een pagina nieuws.php gaat wil hij daar naartoe gaan :s

Sharpo

Legacy Member

adrianhates

Legacy Member
Sharpo zei:
Afaik; Google heeft een unieke ID in elke URL nodig om correct alles te indexeren etc. ;)

is this fo real?

if( is fo real){
echo " stop met het uit uw duim te zuigen ";
}
else{
echo " haha ";
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan