<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cojack blog &#187; seo url</title>
	<atom:link href="http://www.cojack.pl/tag/seo-url/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cojack.pl</link>
	<description>Programowanie oraz Open Source powodem do życia</description>
	<lastBuildDate>Sat, 26 Nov 2011 18:43:28 +0000</lastBuildDate>
	<language>PL</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Routing w PHP</title>
		<link>http://www.cojack.pl/routing-w-php</link>
		<comments>http://www.cojack.pl/routing-w-php#comments</comments>
		<pubDate>Wed, 02 Feb 2011 14:15:22 +0000</pubDate>
		<dc:creator>cojack</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[horde routes]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[seo url]]></category>
		<category><![CDATA[skrypty php]]></category>

		<guid isPermaLink="false">http://www.cojack.pl/?p=424</guid>
		<description><![CDATA[ Kiedyś już pisałem o Seo Url na blogu, co prawda temat stary jak świat, ale jakoś nigdy nie miałem koncepcji by to jakoś skrzętnie napisać. Otóż może tak trochę historii, ogólnie routing to wymyślili chłopacy od ruby on rails, napisali i tam im śmigało, następnie paru maniaków przepisało to ...]]></description>
			<content:encoded><![CDATA[<p><img width="100" height="100" alt="PHP" src="http://www.cojack.pl/wp-content/arch-php.png" title="PHP" class="alignleft"> Kiedyś już pisałem o Seo Url na blogu, co prawda temat stary jak świat, ale jakoś nigdy nie miałem koncepcji by to jakoś skrzętnie napisać. Otóż może tak trochę historii, ogólnie routing to wymyślili chłopacy od ruby on rails, napisali i tam im śmigało, następnie paru maniaków przepisało to do pythona, widać mieli w tym jakiś cel (dla mnie to masochizm pisać strony w pythonie ale co ich to ich). I nadszedł czas by ktoś przepisał koncept do PHP. Chwała im za to. A teraz ja ogarnięty szałem pisania swojego systemu, z nadszarpniętą przez kolegę Glossego dumą że pierdzę w stołek i nic nie robię postanowiłem wykorzystać dobrodziejstwo Open Sourcowych Licencji.</p>
<h3>Routing wtf?</h3>
<p>Czym jest routing? W sumie to wikipedia ma o tym swoje zdanie co prawda, ale moje jest takie: &#8222;Przepływem informacji&#8221;. O i na tym mógłbym zakończyć, ale że jakoś nie chce mi się jeszcze spać to sobie popiszę trochę. Jak dobrze wiemy, żeby nasza aplikacja napisana w jakże to niebanalnym języku którym jest PHP, wiedziała co robimy, co wywołać, co zepsuć. Musimy jej przesłać akcję, najczęściej po staremu byśmy to zrobili metodą łopatologiczną czyli: index.php?action=urwij. I w także oto cudowny sposób (prawie że magiczny), przesyłamy do naszej aplikacji GETa z danym kluczem i wartością, która po danej wartości z klucza wykona odpowiednią dla nas akcję. Ale czy to nie zubożałe? Takie prymitywne. W ten sposób to piszą strony gimnazjaliści za 50zł i zabierają nam chleb. Z tą różnicą że pewnie nawet nie wiedzą jak bardzo ich aplikacja jest crackerFriendly. Ale who care?</p>
<p>(&#8230; wdech &#8230; wydech&#8230; )</p>
<p>Czy nie ładniej by było gdyby nasza aplikacja miała jakiś bardziej zaawansowany system URL? Otóż oczywiście że ładniej, a np taki: www.domena.pl/:controller/:action ?</p>
<h3>Horde Routes</h3>
<p>Z pomocą przychodzi nam horde routes, horde to jest w ogóle zbiór przygotowanych do użycia regexpów którę sparsują nam naszego urla, zwrócą nam akcję i controllery. Także wszystko mamy gotowe. Nie działa to inaczej niż routing w Symfony. Też mamy statycznie routingi, nazwane, funkcje filtrujące, wildcard, grupowanie ścieżek, oraz warunkowe ścieżki (ciekawa sprawa swoją drogą).</p>
<h3>Do dzieła!</h3>
<p>Idziemy na stronę: http://dev.horde.org/routes/ pobieramy paczkę albo z pear&#8217;a instalujemy:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> pear channel-discover pear.horde.org
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> pear <span style="color: #c20cb9; font-weight: bold;">install</span> horde<span style="color: #000000; font-weight: bold;">/</span>routes</pre></div></div>

<p>Wymagania co do php to 5.1 lub wyżej a najlepiej 5.2 lub wyżej. Dziwne, nie zagłębiałem się w kod, ani changeloga pomiędzy tymi ver nie sprawdzałem skąd taka rozbieżność.</p>
<p>No to pierwsze uruchomienie:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Horde/Routes/Mapper.php'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Horde/Routes/Exception.php'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Horde/Routes/Route.php'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Horde/Routes/Utils.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$mapper</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Horde_Routes_Mapper<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$mapper</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">':controller/:action'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Poprzez metodę Horde_Routes_Mapper::connect() dodajemy nasze ścieżki które będziemy chcieli by mapper wyłapał który z adresów przesyłany do adresu url jest pasujący. A mało tego, przydałby się jakiś .htaccess, ja korzystam z tego z drupala, oczywiście przerobionego na moje potrzeby, ale w wcześniejszym <a href="http://www.cojack.pl/seo-url-mod-rewrite" title="Seo url mod rewrite">link</a> wpisie o routingu już podawałem jak może taki .htaccess wyglądąć.</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">FollowSymLinks</span>
<span style="color: #00007f;">DirectoryIndex</span> index.php
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_rewrite.c&gt;
  <span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
  <span style="color: #00007f;">RewriteBase</span> /
  <span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-f
  <span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-d
  <span style="color: #00007f;">RewriteRule</span> ^(.*)$ index.php?q=$1 [L,QSA]
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></div></div>

<p>Amen.</p>
<p>Ból jest taki, żeby Horda wiedziała co ma mapować musi znać listę kontrolerów które ma mapować, także musimy to w jakiś sposób podać:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$mapper</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createRegs</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'default'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'message'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>i to jest teraz nasza lista kontrolerów jakie mamy dostępne w aplikacji.</p>
<p>Ok a skąd Horda ma wiedzieć z czego ma pobierać te dane? O stąd:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$co_znalazlo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$mapper</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$nasz_adres_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>I teraz w $co_znalazlo, będziemy mieli tablicę takiego patha jakiego podaliśmy w connect(); o ile coś znajdzie w innym wypadku NULL z tego co pamiętam. Np dla urla: &#8222;/user/new&#8221; zwróci nam tablicę:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'user'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'new'</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Tadam!</p>
<h3>Słów kilka na zakończenie</h3>
<p>To jest bardzo prosty przykład, chciałem tylko zwrócić uwagę na samo narzędzie bo jest, działa znakomicie, przepisane z pyhtona. Także przetestowane na pewno, sam używam i polecam. Postaram się o więcej wpisów na ten temat, obowiązkowo odsyłam do manuala link w stopce oraz do zakładki Integration na ich stronie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cojack.pl/routing-w-php/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Seo URL &#8211; mod rewrite</title>
		<link>http://www.cojack.pl/seo-url-mod-rewrite</link>
		<comments>http://www.cojack.pl/seo-url-mod-rewrite#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:26:30 +0000</pubDate>
		<dc:creator>cojack</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[apache linux]]></category>
		<category><![CDATA[friendly url]]></category>
		<category><![CDATA[modrewrite]]></category>
		<category><![CDATA[seo url]]></category>
		<category><![CDATA[skrypty php]]></category>

		<guid isPermaLink="false">http://cojack.os-cms.pl/?p=124</guid>
		<description><![CDATA[Co nie co chciałbym przedstawić o przepisywaniu linków za pomocą mod_rewrite, czyli tak zwanym Seo URL (z ang. Search engine optimization), przepisywaniem linków, friendly url itp. Cała sztuka polega na tym, że przesyłamy tylko jednego $_GET&#8217;a, a następnie za pomocą php obrabiamy wynik, i interpretujemy wartości przedstawione w poszczególnych elementach ...]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="PHP" src="http://cojack.os-cms.pl/wp-content/arch-php.png" alt="" width="100" height="100" />Co nie co chciałbym przedstawić o przepisywaniu linków za pomocą mod_rewrite, czyli tak zwanym Seo URL (z ang. Search engine optimization), przepisywaniem linków, friendly url itp. Cała sztuka polega na tym, że przesyłamy tylko jednego $_GET&#8217;a, a następnie za pomocą php obrabiamy wynik, i interpretujemy wartości przedstawione w poszczególnych elementach tablicy. Gdyż właśnie w niej będziemy przechowywać ścieżki.</p>
<h3>Mod rewrite</h3>
<p>No to do dzieła przykład użycia, plik <strong>.htaccess</strong>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">FollowSymLinks</span>
<span style="color: #00007f;">DirectoryIndex</span> index.php
&lt;<span style="color: #000000; font-weight:bold;">IfModule</span> mod_rewrite.c&gt;
  <span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
  <span style="color: #00007f;">RewriteBase</span> /
  <span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-f
  <span style="color: #00007f;">RewriteCond</span> %{REQUEST_FILENAME} !-d
  <span style="color: #00007f;">RewriteRule</span> ^(.*)$ index.php?q=$1 [L,QSA]
&lt;/<span style="color: #000000; font-weight:bold;">IfModule</span>&gt;</pre></td></tr></table></div>

<p><em>Odnośnie RewriteCond działa jakby if, więc !-f nie ma być plikiem, a !-d nie ma być katalogiem, jeżeli jest ok, to idzie dalej, flaga L informuje apache o zakończeniu działania skryptu.</em></p>
<p>Mamy już gotowy plik .htaccess, teraz możemy przejść do napisania funkcji która nam ładnie podzieli całego $_GET&#8217;a.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> Route<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'q'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$fetch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'q'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>I wtedy mamy linki w postaci:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.jakas-strona.pl/jakis/adres/ktory/widzi/user</pre></div></div>

<p>a Ty widzisz to tak:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">Array
(
  [0] = &quot;jakis&quot;
  [1] = &quot;adres&quot;
  [2] = &quot;ktory&quot;
  [3] = &quot;widzi&quot;
  [4] = &quot;user&quot;
)</pre></td></tr></table></div>

<p>Albo (pomysł z forum.php.pl):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> Route<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'q'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$fetch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'q'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$n</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$fetch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$_PARAM</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$n</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$_PARAM</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$fetch</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$fetch</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I adresy mamy w postaci:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">http://www.jakas-strona.pl/kategoria/5/produkt/6</pre></div></div>

<p>będziemy mieli dostęp wtedy do tablicy $_PARAM tak jak z $_GET, czyli</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$_PARAM</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'kategoria'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// powinno dać nam 5</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$_PARAM</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'produkt'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// ... 6</span>
&nbsp;
<span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_PARAM</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<h3>Seo URL</h3>
<p>Czym jest tak na prawdę te Seo URL? I czy to wszystko jest mi na prawdę potrzebne?<br />
Odpowiedź jest dwojaka, jak wiemy algorytmy google z rankingiem są cały czas aktualizowane, chociaż google ostro twierdzi że ich nie tyka. Wystarczy wejść na Polskie forum odnośnie optymalizacji witrny i pozycjonowania i możemy przeczytać co prawdziwi pozycjonerzy o tym myślą. Co do rankingu dzięki seo url, po troche jest w tym prawda, chodź najważniejsze są linki prowadzące do Twojej witryny. Roboty zbierają dane z adresu też, dzięki temu łatwiej jest Ci się znaleźć w indeksie google, zwróć uwagę przy wyszukiwaniu w google, że podana fraza szukana jeżli znajduje się w adresie strony, jest przez google podświetlana.</p>
<h4>Słów kilka na zakończenie</h4>
<p>Używać co kto woli, w moim przypadku nie ma tablicy asocjacyjnej, jest zwykła tablica iteracyjna. Url&#8217;e mogą być krótsze chodź nie muszą, przy takim podejściu do adresów, należy pilnować się o adresacje w tabeli. I pamiętajmy, pierwszy element tablicy to nie jest 1, tablica 30-elementowa nie ma ostatniego elementu <u>$tab[30]</u>.</p>
<p>Czego tutaj brakuje? Oczywiście filtrowania $_GET['q']. Do tego wrócimy w bliższym czasie.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cojack.pl/seo-url-mod-rewrite/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

