Skocz do zawartości
Zaloguj się, aby obserwować  
srok@

[php] Przyjazne urle bez mod_rewrite

Polecane posty

Część kodu jest z jakiejś (niepamiętam adresu) strony :)

Może się komuś przyda. (ja pisałem ;) ).

Pewnie często przeglądając strony zauważyliście przyjazne url`e.

Np. zamiast index.php?show=news&action=all&id=35435&lang=pol było index.php/news/all/35435/pol - takie link zdecydowanie woli google, łatwiej wypozycjonować taką stronę. Tylko jak to osiągnąć bez mod_rewrite (np. na darmowych serwerach lub np. home.pl ).

Wystarczy użyć tego kodu:

<?php

$path = array(); // Tworzenie tablicy

$strDefaultPath = '/welcome'; // Standardowa wartość

$_SERVER['PATH_INFO'] = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : $strDefaultPath; // Jeśli puste ustawia standardową wartość

$path = explode( '/', substr( $_SERVER['PATH_INFO'], 1) ); // Rozbija PATH_INFO co znak /



if(file_exists($path['0'].'.php')) // Sprawdzanie czy istnieje plik z pierwszego /asfk/

{

require($path['0'].'.php'); // Jeśli tak to go includuje dodając .php

}

else

{

require('welcome.php'); // Jeśli nie to includuje plik welcome.php

}



?>

W tym kodzie $path['0'] jest zajęte dla pliku który ma być includowany reszta wedle uznania.

plik wyjściowy to index.php

Kolejne dane są przechowywane w zmiennych $path['liczba'];

Np.

www.strona.pl/index.php/news/show/all/11/pl

Daje w konsekwencji:

includowanie pliku news.php jeśli istnieje

nadanie zmiennym wartości:

<?php

$path['1'] = 'show';

$path['2'] = 'all';

$path['3'] = '11';

$path['4'] = 'pl';

?>

Myśle, że już każdy rozumie ten kod.

Oczywiście adresy obrazków, plików trzeba dawać ścieżką bezwzględną, np.

<img src="http://strona.pl/img/obrazek.gif">

Gdyż w innym wypadku szuka obrazka tam gdzie go zapewne nie ma :)

 

Proszę o komentarze dot. tego artykułu. Sam napisałem ten art :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

możliwe, właśnie nie wiedziałem skąd mam ten kod a mi się nudziło więc napisałem ten art.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam taki kod

<?php

$path = array(); // Tworzenie tablicy

$strDefaultPath = 'news'; // Standardowa wartość

$_SERVER['PATH_INFO'] = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : $strDefaultPath; // Jeśli puste ustawia standardową wartość

$path = explode( '/', substr( $_SERVER['PATH_INFO'], 1) ); // Rozbija PATH_INFO co znak /



if(file_exists($path['0'].'.php')) // Sprawdzanie czy istnieje plik z pierwszego /asfk/

{

require($path['0'].'.php'); // Jeśli tak to go includuje dodając .php

}

else

{

require('news.php'); // Jeśli nie to includuje plik welcome.php

}



?>

i linki np

  <li><a href="index.php/contact" style="font-size: 16px;">KONTAKT</a></li>

A co jeśli chiałbym link do katalogu np img ?

http:...../index.php/img/contact nie działa :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W bardzo brzydkiej przeróbce powyższego:

if ((count($path) == 2) && (file_exists($path['0'].'/'.$path['1'].'.php'))) {
require($path['0'].'/'.$path['1'].'.php');
} elseif ((count($path) == 1) && (file_exists($path['0'].'.php'))) {
require($path['0'].'.php');
} else {
require('news.php');
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
W bardzo brzydkiej przeróbce powyższego:

if ((count($path) == 2) && (file_exists($path['0'].'/'.$path['1'].'.php'))) {
 require($path['0'].'/'.$path['1'].'.php');
} elseif ((count($path) == 1) && (file_exists($path['0'].'.php'))) {
 require($path['0'].'.php');
} else {
 require('news.php');
}

Dzięki wielkie, dlaczego brzydkiej ? Działa dobrze prosty

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dzięki wielkie, dlaczego brzydkiej ? Działa dobrze prosty
Bo w php :)

 

A tak poważniej, to działa tylko na dwóch poziomach (aktualny katalog i podkatalog), nie ma żadnych zabezpieczeń, przez co można dołączyć pliki .php z katalogu 'powyżej' aktualnego katalogu (http://xxx.pl/../info.php), itd. Właściwie odrazu to popraw :P

 

if ((count($path) == 2) && ($path['0'] != "..") && (file_exists($path['0'].'/'.$path['1'].'.php'))) {
require($path['0'].'/'.$path['1'].'.php');
} elseif ((count($path) == 1) && (file_exists($path['0'].'.php'))) {
require($path['0'].'.php');
} else {
require('news.php');
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zaloguj się, aby skomentować

Będziesz mógł dodać komentarz po zalogowaniu się



Zaloguj się
Zaloguj się, aby obserwować  

×