[.htaccess] Mod_rewrite doet niet wat ik wil

Pagina: 1
Acties:

  • link0007
  • Registratie: Augustus 2006
  • Niet online
Om wiki links van het formaat http://www.site.tld/wiki/artikel om te schrijven naar http://www.site.tld/w/index.php?title=artikel, maak ik gebruik van een .htaccess:

code:
1
2
3
4
5
6
7
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.*)$ /w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ wiki/ [L,QSA]
RewriteRule ^/*$ wiki/ [L,QSA]


Deze is de code die mediawiki als oplossing gedocumenteerd heeft, en zou moeten werken.
Echter krijg ik als ik het probeer, een error dat /w/index.php niet bestaat (deze bestaat wel).


Als ik vervolgens als work-around een php script in de directory waar de .htaccess ook staat (public_html/), met deze code:

PHP:
1
2
3
4
<?php
$page = $_GET['title'];
header('Location: /w/index.php?title='.$page);
?>


En de htaccess wijzig naar dit:

code:
1
2
RewriteEngine On
RewriteRule ^wiki/(.*) redirecter.php?title=$1


Dan geeft hij weer aan dat redirecter.php niet bestaat :X

Op een andere server die ik heb, werkt die rewriteRule wel (alleen dan met andere naampjes natuurlijk).


Wat is er hier mis? Of kan het aan de server liggen?

Ik heb het ook al op de IRC van mediawiki gevraagd, maar niemand kon me daar helpen.

[ Voor 3% gewijzigd door link0007 op 30-06-2008 20:36 ]

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


  • Xcalibur
  • Registratie: Augustus 2002
  • Laatst online: 20:49
misschien ligt het aan de eerste slash in de /w/ ? Wat gebeurt er als je die weghaalt?

Wellicht verwacht jij in /var/home/www/ te zitten, en de server in /....

Designer | Developer | Director | Photographer | LARPer | Geek | Male | 39


  • link0007
  • Registratie: Augustus 2006
  • Niet online
Xcalibur schreef op maandag 30 juni 2008 @ 20:37:
misschien ligt het aan de eerste slash in de /w/ ? Wat gebeurt er als je die weghaalt?

Wellicht verwacht jij in /var/home/www/ te zitten, en de server in /....
Dan zal het geen probleem moeten zijn bij de adaptatie van de htaccess om hem door te verwijzen naar een redirecter.php script :)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 06-02 16:05
De document-root van je webserver is niet correct ingesteld. Kijk maar eens in je error_log waar hij die /w/index.php vandaan probeert te halen. Misschien draait je docroot via een alias, of wordt gebruik gemaakt van mass virtual hosting waar je document-root op zichtzelf al middels een rewrite tot stand komt.

Je kunt het nog proberen met bovenin je htacces;
code:
1
RewriteBase /
of het absolute pad naar je document root.
http://httpd.apache.org/d..._rewrite.html#RewriteBase

Wat geeft;
PHP:
1
<?=$_SERVER['DOCUMENT_ROOT'];?>
?
En komt dat inderdaad overeen met waar je bestanden staan?

[ Voor 60% gewijzigd door frickY op 30-06-2008 21:12 ]


  • link0007
  • Registratie: Augustus 2006
  • Niet online
frickY schreef op maandag 30 juni 2008 @ 21:06:
De document-root van je webserver is niet correct ingesteld. Kijk maar eens in je error_log waar hij die /w/index.php vandaan probeert te halen. Misschien draait je docroot via een alias, of wordt gebruik gemaakt van mass virtual hosting waar je document-root op zichtzelf al middels een rewrite tot stand komt.

Je kunt het nog proberen met bovenin je htacces;
code:
1
RewriteBase /
of het absolute pad naar je document root.
http://httpd.apache.org/d..._rewrite.html#RewriteBase

Wat geeft;
PHP:
1
<?=$_SERVER['DOCUMENT_ROOT'];?>
?
En komt dat inderdaad overeen met waar je bestanden staan?
Via het unix command pwd, krijg ik m'n path ook neem ik aan?

Maar dan krijg ik dus dit als htaccess:

code:
1
2
3
4
5
6
7
8
Options +FollowSymLinks
RewriteBase /usr/www/users/accountnaam/
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.*)$ w/index.php?title=$1 [PT,L,QSA]
RewriteRule ^wiki/*$ wiki/ [L,QSA]
RewriteRule ^/*$ wiki/ [L,QSA]


En nog geeft hij dezelfde foutmelding, maar nu is /w/index.php verandert in /usr/www/users/accountnaam/w/index.php

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • link0007
  • Registratie: Augustus 2006
  • Niet online
Bedankt :)

Maar ik ben er nog niet achter wat het probleem dan is...

Als ik in die base_url gebruik in de command line, dan blijkt dat hij prima klopt, maar voor de htaccess klopt hij blijkbaar niet?

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 06-02 16:05
Is "accountnaam" in dat pad toevallig je domeinnaam?
In dat geval dikke kans dat je hoster gebruik maakt van mass virtual hosting

In dat geval zou et stukje PHP dat ik hierboven poste waarschijnlijk "/usr/www/users/" geven.
Klopt dat? Dan zou je als RewriteBase je accountname moeten hanteren.
Zo niet, wat geeft die dan wel?

Het pad welke je via Unix verkrijgt, of dat nou via een PHP shell-functie is of via bijv SSH, staat hier verder los van.

[ Voor 27% gewijzigd door frickY op 30-06-2008 23:00 ]


  • link0007
  • Registratie: Augustus 2006
  • Niet online
Nee, dat stukje PHP gaf "/usr/www"

Maar ik heb het werkend.. Ik snapte blijkbaar niet goed hoe rewritebase werkte! Ik dacht dat je daar een absolute locatie mee aangaf, maar het is dus een offset vanaf de base locatie? Klopt dat zo ongeveer? want het werkt nu wel :*)

IF IF = THEN THEN THEN = ELSE ELSE ELSE = IF;

Pagina: 1