Mod_rewrite - zamiana adresu z $_GET

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.

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ć.

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