Mod_rewrite - zamiana adresu z $_GET

Odpowiedz Nowy wątek
2014-12-12 23:21
0

Cześć.

Chciałbym adres xxx.com/activate.php?code=value zamienić na xxx.com/activate/value, gdzie $_GET['code'] = value.

Nie mogę sobie z tym poradzić, nie znalazłem podobnego przykładu. Otrzymuję wewnętrzny błąd serwera.

Na razie w .htaccess mam wpisane coś takiego:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule (.*)$ $1.php

Unikam w ten sposób .php. Docelowo chcę aby każda podstrona, która ma jakieś ID w linku miała postać np. profile.php?id=55 na profile/55.

edytowany 1x, ostatnio: furious programming, 2014-12-12 23:23

Pozostało 580 znaków

2014-12-13 13:58
0

Cześć.

Problem jest z ostatnią linijką.
RewriteRule (.*)$ $1.php
Po pierwsze przed nawiasem powinien być znak ^, który jest odpowiedzialny za rozpoczęcie wyrażenia regularnego. Następnie wszystko co w adresie znajduje się za pierwszym / zostaje przepisane do $1. Z adresu xxx.com/activate/value dostajesz xxx.com/activate/value.php.

Ja bym to zrobił tak:

RewriteEngine On

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

RewriteRule ^(.*)$ index.php?q=$1 [QSA,L]

A potem w index.php obsłużył resztę.

<?php
    $q = isset($_GET['q']) ? $_GET['q'] : null;
 
    if($q!=null) {
        $url = explode('/', $q);
 
        // Dla xxx.com/activate/value
        // $url[0] = activate
        // $url[1] = value
 
        // Możesz zrobić tak i używać $url w następnych plikach.
        include $url[0].".php"; // Wymaga zabezpieczenia i sprawdzenia czy plik istnieje.
    }
?>

Powyższy kod wymaga paru zabezpieczeń przed atakami, ale nie chciałem się rozpisywać.

edytowany 1x, ostatnio: Couy, 2014-12-13 16:35

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0