.htaccess Redirect werkt niet na behoren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 558688

Topicstarter
Om hoofdpijn van te krijgen, al een uurtje bezig en dan zakt de moed in je schoenen. Hup, op naar Tweakers. Komt ie:

Wat ik wil is:

http://www.domein.co/berichten/83/0

Wat werkt wel:
/berichten laad netjes berichten.php

Eigenlijk dient alles achter /berichten/ in een soort van $REQUEST[''] te komen.
Zodra iets achter /berichten/83/0 ingevuld komt er een 500 Internal.
De /83/0 wordt niet goed verwerkt.

code:
1
2
3
4
5
6
7
8
9
Options +SymLinkIfOwnerMatch
RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME}.php -f

RewriteRule ^(.*)$ $1.php

Acties:
  • 0 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Wat doe je precies? Zo te zien verwijs je /berichten/83/0 naar /berichten/83/0.php. Nogal wiedes dat dat niet werkt. Probeer eens te matchen op slashes, zoiets als
code:
1
RewriteRule ^/([A-Za-z]*)/([0-9]*)/([0-9]*)$ $1.php?id=$2&tweedeargument=$3

When life gives you lemons, start a battery factory


Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 22:20
Wat ze vaak doen (en wat misschien makkelijker is) is alles naar index.php redirecten en vanuit index.php bepalen wat je wil doen met de request.
code:
1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

En dan kan je bijvoorbeeld al je elementen in een array zetten.
PHP:
1
2
$reqUrl = trim($_SERVER['REQUEST_URI'], '/');
$pathElements = explode('/', $reqUrl);

Misschien makkelijker als je niet thuis bent in htaccess

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
$_SERVER['PATH_INFO']

Je kan dan doen: /berichten.php/83/0

en: /berichten/83/0
met: RewriteRule ^/([A-Za-z]+)(/.*)?$ $1.php$2

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Zelf gebruik ik multiviews voor pretty-urls (al is het maar voor 1 bestand overigens).
.htaccess
code:
1
2
3
4
Options +Indexes +FollowSymLinks +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


berichten.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function assign_get_vars()
{
    $args = func_get_args();
    $path_info = $_SERVER['PATH_INFO'];
    $p = explode("/", substr($path_info,1) );

    // assign the vars
    $total = count($args);
    for($i=0; $i < $total; $i++)
    {
        $name = $args[$i];
        $_GET[$name] = $p[$i];
        $_REQUEST[$name] = $p[$i];
    }
}

assign_get_vars('cat','id','title');

/berichten/1/38/blahblah.html

$cat = 1
$id = 38
$title = blahblah.html

Voor mij een stuk overizchtelijker, regular expressions heb je hiervoor niet nodig, die ken ik verders dan ook niet.

Acties:
  • 0 Henk 'm!

Anoniem: 558688

Topicstarter
We komen al een stukje dichterbij, dank daarvoor.

De code nu, met toepassing van de function assign_get_vars, werkt. Dank je Raz.

Alleen nog 1 probleempje. De url dient nu http://domein.co/berichten.php/0/83/test te zijn. Hoe kan de .php er tussenuit worden geschreven met .htaccess?

code:
1
2
3
4
5
Options +SymLinksIfOwnerMatch +MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Gebruik die .htaccess die ik neerzette ook eens dan. Bij mij werkt het namelijk.

Acties:
  • 0 Henk 'm!

Anoniem: 558688

Topicstarter
Dat heb ik ook gedaan, maar bij mij weigert hij. Hij laat de bestanden alleen in met de .php extensie in de url-balk.

Acties:
  • 0 Henk 'm!

  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Mis je nu niet een rewrite rule, die /berichten/ omzet naar /berichten.php/ ?

After all, we are nothing more or less than what we choose to reveal.


Acties:
  • 0 Henk 'm!

Anoniem: 558688

Topicstarter
Die ben ik nog steeds aan het zoeken, heb er al vele geprobeerd, maar de truck is om alles achter berichten/ te rewriten. Dus berichten/0/83/1/2/3/ etc...

Acties:
  • 0 Henk 'm!

Anoniem: 558688

Topicstarter
Eindelijk!!!

Dit is hem geworden:

code:
1
2
3
4
5
6
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^/]+)(/.*)?$ $1.php/$2

Acties:
  • 0 Henk 'm!

Anoniem: 26306

code:
1
FallbackResource /index.php

Stop met misbruiken van mod_rewrite!

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Anoniem: 26306 schreef op zaterdag 30 november 2013 @ 15:07:
code:
1
FallbackResource /index.php

Stop met misbruiken van mod_rewrite!
FallbackResource is Apache >= 2.2.16
code:
1
2
3
4
5
6
7
8
9
10
11
12
<IfModule mod_version.c>
    <IfVersion >= 2.2.16>
        <IfModule mod_dir.c>
            FallbackResource /index.php
        </IfModule>
    </IfVersion>
    <IfVersion < 2.2.16>
        <IfModule mod_rewrite.c>
            ......
        </IfModule>
    </IfVersion>
</IfModule>

Maak je niet druk, dat doet de compressor maar

Pagina: 1