ďťż

[PHP] Mod_Rewrite + krótkie linki zalety? bardziej przyjazne wyszukiwarkom?

       

Podstrony


telcocafe

Czy strony z linkami w prostszej postaci rzeczywiście są lepiej indeksowane przez roboty? Przykłady:
- example.com/150
- example.com/art-500/page-2

Dla Google problemem są ID sesji dołączane do URL oraz podobne podstrony. Jaki to ma związek z formą adresu?
- /40/sort-date
- ?40&sort=date - te same parametry prowadzące do tej samej podstrony

Aby jeszcze bardziej skrócić linki, postanowiłem zapisywać je zapisywać tak:
- index.php?50 - kategoria 50
- index.php?art=30&page=2 - gdzie 'art' to nazwa modułu, a '30' - ID
- index.php?edit&act=art lub index.php?edit=art
Mam nadzieję, że wyszukiwarki sobie poradzą z parametrami bez wartości. :)

Wracając do mod_rewrite, jak zamieniać linki w prostej postaci o nieznanej liczbie parametrów na linki z parametrami? Czy to jest w ogóle możliwe? W niektórych aplikacjach spotyka się też takie: index.php/art/50, ale tu trzeba już znać kolejność wszystkich parametrów, chyba że sami utworzymy tablicę $_GET (lub o innej nazwie) - index.php/art,50/page,2...
Co jednak doradzacie? Standardowe linki z parametrami, mod_rewrite czy index.php/dalej/... W dwóch ostatnich przypadkach muszę podać bezwzględną ścieżkę plikowi CSS w głównym pliku szablonu (kolejna wstawka).
Użytkownik Ferrari edytował ten post 19 styczeń 2008, 22:17


Najprościej przekazywac wszystkie linki do jednejo pliku który potem z linku przetworzy sobie jakie są parametry.
Np www.domena.pl/art/hehe/bla/50
Robisz w pliku htaccess
RewriteEngine On RewriteRule !\.(gif|jpe?g|png|css|js|swf)$ index.php
(ostatnia linijka wolna)
i wtedy jeżeli nie chcesz sie odwołac do pliku o podanych wyżej rozszerzeniach to przenosi na index.php

$urlArray=explode('/',$_SERVER["REQUEST_URI"]);
Zakładajać ze separaetorem bedzie znak '/'

Google bodajże lepiej indexuje strony które na koncu maja "rozszerzenie" .html. Czyli najlepsze linki to takie
www.domena.pl/art-hehe-bla-50.html i to też nie stanowi problemu korzystając z mod rewrite.
Użytkownik polasek edytował ten post 19 styczeń 2008, 22:25
zakończenie .html niewiele ma tu do roboty (mogą być dowolne bo jest wiele technologi tworzenia stron - .php, .asp itd.). Co do przyjaznych linków to warto je mieć, przynajmniej na kluczowe elementy jak np. artykuły, newsy i pozostałą treść.

Options +FollowSymLinks <IfModule mod_rewrite.c> RewriteEngine On #RewriteBase /berry RewriteCond %{REQUEST_URI} \..+$ RewriteCond %{REQUEST_URI} !\.html$ RewriteRule .* - [L] RewriteRule ^(.*)$ index.php [QSA,L] </IfModule>
W tym wypadku, kazdy request bez rozszerzenia pliku lub z rozszerzeniem .html, będzie przesyłany do index.php. I z poziomu php odczytasz je w $_SERVER['REQUEST_URI']; - zrób dobry routing i będzie dobrze :)
śmiem twierdzić że dobry routing to połowa sukcesu w projektowaniu frameworka czy tez cms'a.



Czy adresy w stylu index.php/strona/50 też można nazwać przyjaznymi? Lepsze są jednak bez index.php, czyli z użyciem mod_rewrite. Często wymieniamy się linkami na forach, czatach, komunikatorach... Przydałoby się, by zawierały również tytuł podstrony. Problem w tym, że może on zawierać różne znaki - @, $, #, litery z innych alfabetów lub stron kodowych... Czy istnieje funkcja w PHP, która usunie je lub zostawi tylko te znaki, które chcemy (czyli liczby i litery)? Jedyne, co mi teraz przychodzi do głowy, to foreach($title as $char) { if(...) $url.=$char } albo for(...) i akcja odwrotna (usuwanie znaków).


Czy adresy w stylu index.php/strona/50 też można nazwać przyjaznymi? Lepsze są jednak bez index.php,
Są przyjazne :) nielubiane są parametry z GET :) Poza tym nie staraj się być bardziej przyjaznym niż to potrzebne.

Przydałoby się, by zawierały również tytuł podstrony.
Zazwyczaj więcej z tym problemów niż pożytku. Dość częstym rozwiązanie jest dodatkowe pole zawierające "sluga", czyli taki bezpieczny string do użycia w generowanych linkach zamiast ID.

Ja używałem tego: http://www.php.rk.ed...kie-urle-i-php/ do dynamicznego przepisywania URLi na wynikowych stronach :) ("krotkie-urle-i-php" to slug ;))
Użytkownik Riklaunim edytował ten post 19 styczeń 2008, 23:19
private function _link ($title) { $title = htmlspecialchars_decode($title); $title = preg_replace('#[^a-zA-Z0-9]#', ' ', $title); $t = explode(' ', trim($title)); $r = array(); foreach ($t as $key=>$val) { $val = trim($val); if (strlen($val)>2) { $r[] = $val; } } if (!$r) { $r = $t; } if (!$r) { $r = array('default'); } $a = implode('-', $r); if (!$a) { $a = 'default'; } return $a; }
To cudo używam, działa ładnie, przepuszcza tylko znaki alfanumeryczne, usuwa zbedne spacje, zamienia spacje na myslniki i wstawia tylko slowa dluzsze niz 2 znaki. Jak dobrze znasz regexp to całą funkcję byś mógł ograniczyć do samego regexp i efekt ten sam ;)

$data=preg_replace('/\W/', "", $_SERVER["REQUEST_URI"])
Sprawdza się świetnie :)
zreszta mozesz sprawdzic na http://osteele.com/tools/rework/#

Powrócę do tematu. W najbliższym czasie zastosuję "przyjazne linki". Chciałbym się jednak upewnić, czy idę w dobrym kierunku. :)

W .htaccess przekierowujemy domena.pl/moduł/oraz/parametry do: index.php/moduł/oraz/parametry. Następnie taki URL analizujemy w PHP:
<?php $_URL = explode('/', $_SERVER['...']); //Otrzymujemy: $_URL[0], $_URL[1], itd... ?>W ten sposób poszczególne parametry zawsze są w 1 miejscu i tworzą wrażenie ścieżki do katalogu, np.
* twojastrona.pl/art/50/2 - artykuł o ID=50 i stronie=2.

Problem pojawia się, gdy przekazujemy większą ilość parametrów do GET, a nie wszystkie na raz muszą wystąpić. Co wtedy? Być może tu użyjemy ? i &:
- twojastrona.pl/userlist?city=nazwa_miasta&gid=id_grupy...
- twojastrona.pl/index.php/itemlist?cat=2&... - lista pozycji w centrum zarządzania treścią - przykład bez mod_rewrite

Strony z parametrami po ? można ukryć przed Google - zazwyczaj powinny być stosowane po kliknięciu submitu formularza lub wyboru opcji dostępnej tylko dla uprawnionych użytkowników np. z dynamicznego menu JS lub po kliknięciu innego elementu (onclick). Chyba, że jest lepsze wyjście niż ? i &?

Zawsze adresy możesz zapisać tak, aby nie było ogranicznika co do wystąpień parametrów poprzez np.

twojastrona.pl/art/id/50/page/2

Myślę, że zapis jest zrozumiały.

Nie trzeba takich linków stosować do wszystkiego - np. żeby przeglądać kategorię - owszem, niech będzie twojastrona.pl/kategoria/costam.html. Ale już parametry sortowania mogą spokojnie być w GET, który będzie wygodniejszy - możemy się odwoływać do konkretnych kluczy. To jest połączenie względnej wygody GET i linków które są przyjazne wyszukiwarkom i użytkownikom.
Np. proponuję:
twojastrona.pl/userlist/city/warszawa.html (bierze userów tylko z warszawy) twojastrona.pl/userlist/city/warszawa,opole,katowice.html (jw, ale dla kilku miast) twojastrona.pl/userlist/age/19-20.html twojastrona.pl/userlist/age/19-20.html?sort=nick (bierze userów tylko z przedziału 19-20 lat i sortuje ich wg. nicka) twojastrona.pl/article/id/linki-user-friendly.html twojastrona.pl/article/id/linki-user-friendly.html?page=2
Dla pewnych celów lepiej zastosować zwykły GET niż robić url który wygląda jak:
twojastrona.pl/articles/id/20-50/sort/title/page/10.html
Chyba lepszy jest:
twojastrona.pl/articles/id/20-50.html?sort=title&page=10
?

Tak - dla pewnych celów chyba lepiej zastosować GET, choć nr strony jeszcze może być w "nice URL". :)

Jeszcze pytanie od strony technicznej. Są następujące kwestie:
1. Chyba nie obędzie się bez dołączania pełnego URL (wolę względne z wielu powodów).
2. W przypadku braku mod_rewrite trzeba dopisać /index.php/.

Wystarczy przeprowadzić prosty test.
<a href="/next">nie uwzględnia katalogu skryptu</a> + <a href="next">dodaje elementy niceurl do adresu</a>Bez funkcji generującej URL-e i dodawającej ścieżkę do katalogu, w którym jest index.php, raczej nie obędzie się. Drugim rozwiązaniem jest definiowanie stałej PATH albo URL. Z jakimi innymi trudnościami spotkaliście się jeszcze?

Zanim zastosuję "nice urls", wolę upewnić się, czy nie wyniknie więcej problemów i potrzeb zmian niż korzyści.

PS. Nic nie mam do zwykłych URL. Są czytelne, jak się ich poprawnie używa. "Nice urls" implementuję ze względu na lepsze indeksowanie stron przez przeglądarki (czy to nadal prawda?) i trend na nie.
Użytkownik Ferrari edytował ten post 05 marzec 2008, 23:29
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.