Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Przyjazne adresy w php bez htaccess, require czy file_get_contents?
marek71_33
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


Witam.
W bazie danych mam kolumny, z których pobieram przez zapytanie gotowe (z parametrami oraz skrócone) adresy do swoich stron, np:
adresowi artykuly.php?id_artykulu=10 odpowiada skrocony adres artykuly/tytul-artykulu.
Wszystkie adresy w htacces mam przekierowane do skryptu w pliku seo.php
CODE
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) seo.php/$1 [L]

I teraz mam problem jak zrobić przekierowanie. Pomysły mam dwa:
  1. <?php
  2. $baseUrl = 'http://domena';
  3. $pathInfo = $_SERVER['PATH_INFO'];
  4. if($pathInfo == '/artykuly/tytul-artykulu'){
  5. $_GET['id_tekst'] = 10;
  6. require_once 'tekst.php'; // lub include_once
  7. }
  8. else echo 'Nie ma takiego adresu';
  9.  
  10. ?>

lub
  1. <?php
  2. $baseUrl = 'http://domena';
  3. $pathInfo = $_SERVER['PATH_INFO'];
  4. if($pathInfo == '/artykuly/tytul-artykulu'){
  5. $str = file_get_contents('http://domena/artykuly.php?id_artykulu=10');
  6. print $str;
  7. }
  8. else echo 'Nie ma takiego adresu';
  9.  
  10. ?>

Oczywiście to podstawowa forma tych skryptów bez zabezpieczeń itp.
Moje pytanie jest, które rozwiązanie będzie lepsze wydajnościowo i ze względu na bezpieczeństwo strony? A może ktoś podsunie inne rozwiązanie?

Ten post edytował marek71_33 14.04.2015, 19:01:10
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kreatiff
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Możesz szukać po slugach w bazie, ale jednak szukanie po liczbach całkowitych jest szybsze. Chociaż dla strony z małą ilościa rekordów (kilkaset) nie będzie to miało znaczenia, bo różnice będą pomijalne.

Ogólnie zrobiłbym to tak. Każdy artykuł miałby nadanego w bazie sluga i id.
Link składałby się z np.: artykuly/10-tytul-artykulu
10 to nasz id artykułu, tytul-artykulu to slug.
I po tej 10 szukałbym w bazie artykułu, przy okazji poprawiając tytuł (slug) jak się nie zgadza by uniknąc duplikatów.

I zapominasz całkiem o GET i przepisywaniu URLi ze zmiennymi na "przyjazne linki".

Wystarczy jakiś prościutki ruterek (nawet preg_match), który będzie rozpracowywał całe REQUEST_URI. Jak pasuje do wzoru -> szukamy w bazie, jak nie -> 404.
Albo skorzystaj z czegoś gotowego, np.: http://upshots.org/php/php-regexrouter

Acha, i jeszcze kierujemy w .htaccess cały ruch na index.php.

Ten post edytował kreatiff 14.04.2015, 19:15:01
Go to the top of the page
+Quote Post
marek71_33
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.02.2010

Ostrzeżenie: (0%)
-----


kreatiff Twój pomysł jest fajny, ale zależy mi na tym, żeby pozbyć się cyfr z adresu. A to co ja napisałem jest możliwe do użycia?
Go to the top of the page
+Quote Post
kreatiff
post
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

Ostrzeżenie: (0%)
-----


Możesz i owszem pozbyć się cyfr. Wówczas od razu w bazie szukasz całego "tytul-artykulu" i jak jest, to wyświetlasz artykuł z nim związany. Wówczas nawet id tego artykułu jest Ci niepotrzebne. Ale to jest właśnie rozwiązanie, dla małej ilości artykułów w bazie. Bo gdy jest ich więcej, to wydajność wyszukiwania artykułu zacznie wyraźnie spadać w porównaniu do rozwiązania liczbowego.

W Twoim rozwiązaniu nie rozumiem w ogóle po co są GETy w kodzie. Ich już nie używasz wcale, bo nikt nigdy nie wejdzie w link domena/artykuly.php?id_artykulu=10 (bo go nigdzie nie znajdzie).
Ktoś wchodzi na stronę: domena.pl/tytul-artykulu, czy to z wyszukiwarki, czy innego miejsca, i skoro nie ma w tym URLu żadnego ID, to nie ma sensu go szukać. Tylko od razu po całym tytule (czyli ten nasz tzw. slug) szukamy artykułu w bazie, czy też includujemy plik tekstowy odpowiadający temu artykułowi.

Ten post edytował kreatiff 14.04.2015, 19:34:36
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:29