Oto całość kodu, który znajduje się w pliku
.htaccess. Pierwsza linia włącza moduł rewrite (musi on być wcześniej załadowany). Linia druga określa 'bazę', czyli początek adresu url. W tym przypadku, że plik
news leży w katalogu głównym jest to tylko '/'. Należy pamiętać że dyrektywa RewriteBase tyczy się tylko pierwszej części wzoru, a nie obydwu. W drugiej części trzeba podać całość.
Kod
RewriteEngine On
RewriteBase /
RewriteRule ^news/(.*?)$ /news?id=$1
# tutaj zbędne dyrektywy - wycięte :)
<Files news>
ForceType application/x-httpd-php
</Files>
Dyrektywa <Files news> powoduje, że plik
news jest traktowany jako plik php. Jeśli tego nie będzie nie da rady za pomocą php tego wyciągnąć

.
Teraz część skryptowa.
[php:1:e4735bf198]<?php
$dane = str_replace( $_SERVER['PATH_INFO'] .'/', '', $_SERVER['REQUEST_URI'] ); // obcinamy pierwszy slash
if( strstr( $dane, '/') )
{
$tablica = explode( '/', $dane );
for( $x = 0; $x < sizeof( $tablica ); $x++ )
{
$_URL[ $tablica[ $x ] ] = $tablica[ $x+1 ];
$x++;
}
for( $x = 0; $x < sizeof( $tablica ); $x++ )
{
$_URL[ $x ] = $tablica[ $x ];
}
}
else
{
$_URL = $dane;
}
var_dump( $_URL );
?> [/php:1:e4735bf198]
Pierwsza pętla for powoduje, że adres zapisany w postaci news/id/341/language/pl jest przekształcany w tablicę asocjacyjną o struktórze
Kod
'id' => '341'
'language' => 'pl'
Druga pętła tworzy tablicę z kluczami numerycznymi o struktórze
Kod
0 => 'id'
1 => '341'
2 => 'language'
3 => 'pl'
Jeśli adres jest prosty - w postaci news/341 to zmienna $_URL przyjmuje wartość 341.
Całość adresu url po pierwszym slash'u jest zawarta w tablicy $_GET - na przykład dla wcześniejszej konfiguracji może ona wyglądać tak:
Kod
$_GET["id"] id/341/language/pl
Mam nadzieję, że komuś pomogłem/pomogę nie tylko sobie

. Jeśli są jakieś pytania to piszcie najlepiej na mail'a, postaram się odpowiedzieć bo załapałem o co chodzi <splatch@desk.pl>.