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

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×