Autor Zpráva
lokix
Profil
Zdravím všechny zde na fóru,

chtěl bych požádat o radu případě nakopnutí jak sprovoznit přepis url adres na více podmínek. Tedy page=neco na neco.html zvládám, index.php?kategorie=neco2 na neco2(kategorie) taky, ale nevím jak skombinovat pravidla pro zápis jak index.php?kategorie=neco tak i pro index.php?kategorie=neco&read=nejaky-vyrobek. (neco2/nejaky-vyrobek) To poslední mi né a né jít. Používám .htaccess a mod_rewrite funguje.

Děkuji všem za snahu.
Joker
Profil
lokix:
Podle mého názoru je nejlepší si udělat jednoduchý univerzální .htaccess s pravidlem: Pokud daná stránka na webu neexistuje, přesměruj na index.php a do nějakého parametru mu dej celou zadanou adresu. Tedy například (web)/neco/necojineho/jestedalsi → (web)/index.php?url=neco/necojineho/jestedalsi
O zbytek se pak postará PHP. Viz také MOD_REWRITE - jak začít?.

Dodatek:
My vlastně ten htaccess máme i v FAQ u konfigurace webového serveru.
lokix
Profil
Joker:
Děkuji, toto chápu, ale je to pokud tento příklad chápu na jiný mechanizmus url než mám já. Mé url mám vnitřně web.cz/index.php?kategorie=nejaka-kategorie&read=nejaky-vyrobek a z toho potřebuji dostat web.cz/nejaka-kategorie/nejaky-vyrobek. Lze to udělat nějak jinak než změnou logiky url v mém projektu?

Můj .htaccess:
php_flag display_errors On

RewriteEngine On
RewriteBase /

# přesměrování na variantu s www a odstranění index.php
RewriteCond %{HTTP_HOST} =web.cz
RewriteRule ^index\.php|(.*)$ http://www.web.cz/$1 [R=301,L]

# přesměrování na URL bez parametru
RewriteCond %{QUERY_STRING} ^kategorie=([^&]+)$
RewriteRule ^index\.php|$ %1? [R=301,L]
#
# přesměrování na URL bez parametru 2
RewriteCond %{QUERY_STRING} ^page=([^&]+)$
RewriteRule ^index\.php$ %1.html? [R=301,L]
RewriteRule ^([^/]+)\.html index.php?rw=1&page=$1 [L,QSA]
#
# neexistujícím souborům podstrčit skript index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?rw=1&kategorie=$1 [L,QSA]
#RewriteRule ^([^/]+)/([^/]+)?/?$ ?kategorie=$1&read=$2 // Tento zápis nefunguje.
lokix
Profil
Nechci schválně oživovat téma, ale neporadil by mi někdo jak se poprat s tímto .htaccess abych nemusel měnit struktůru všech url co už mám v tomto zaběhnutém webu, který má mnoho produktů? Do budoucna bych určitě zkusil řešení od Joker, ale teď mě spíš tlačí moc práce a žádný čas. Ale rozhodně děkuji Jokerovi za pomoc.
lokix
Profil
Zdravím,

tak jsem hledal a zkoušel déle a snad jsem už natrefil na možný rewrite zápis, ale má to jednu divnou chybu:
RewriteEngine On
RewriteBase /

# přesměrování na variantu s www a odstranění index.php
RewriteCond %{HTTP_HOST} =web.cz
RewriteRule ^index\.php|(.*)$ http://www.web.cz/$1 [R=301,L]
#
# přesměrování na URL 1
RewriteCond %{QUERY_STRING} ^page=([^&]+)$
RewriteRule ^index\.php$ %1.html? [R=301,L]
RewriteRule ^([^/]+)\.html index.php?rw=1&page=$1 [L,QSA]
#
# přesměrování na URL 2
RewriteCond %{QUERY_STRING} ^kategorie=([^&]+)&read=(.*)$
RewriteCond  %{REQUEST_FILENAME} !-f
RewriteCond  %{REQUEST_URI} !^/(css|imgs)/
RewriteRule ^index\.php|$ %1/%2? [R=301,L]
RewriteRule ^([^/]+)/([^/]+)$ index.php?rw=1&kategorie=$1&read=$2 [L,QSA]
# přesměrování na URL 3
RewriteCond %{QUERY_STRING} ^kategorie=([^&]+)$
RewriteRule ^index\.php|$ %1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?rw=1&kategorie=$1 [L,QSA]

Vše se tváří dobře a jak css tak obrázky mám v adrese s / na začátku, ale stačí abych dal f5 nebo ctrl + f5 a jsem z části nebo úplně bez stylů i obrázků. Asi někde něco cyklím nebo špatně přesměruju, ale už opravdu nevím. Moc bych byl vděčen za každou dobrou duši co by mi pomohla.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: