Autor Zpráva
eref
Profil *
Mal som adresy v tvare http://stranka.sk/index.php?sekcia=nieco&stranka=druha. Potom som vložil do .htaccess-u toto:

# stranka.sk/index.php?sekcia=nieco > stranka.sk/nieco/
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ index.php?sekcia=$1  [R=301,QSA]

# stranka.sk/index.php?sekcia=nieco&stranka=druha > stranka.sk/nieco/druha
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/([^/]+)?/?$ index.php?sekcia=$1&stranka=$2  [R=301,QSA]


...a stále sa tam objavujú staré adresy. Ak tam ručne zadám adresu stranka.sk/nieco/druha, tak sa to presmeruje na pôvodnú. Malo by to byť naopak. Čo treba ešte urobiť/zmeniť?
denCo
Profil
máš to zle rešené... odstráň z tade [R=301,QSA] a po zadaní stranka.sk/nieco/druha užívateľ dostane ten istý výsledok ako stranka.sk/index.php?sekcia=nieco&stranka=druha
eref
Profil *
Áno, vďaka, teraz mi to ako tak funguje. Ak som na stránke stranka.sk/nieco, tak to funguje bezchybne, ale ak som na stranka.sk/nieco/druha, tak sa mi nezobrazujú obrázky ani štýl, ktoré majú relatívne adresy, lebo ich hľadá v adresári nieco, ktorý neexistuje. Dá sa to vyriešiť aj inak ako zmenením odkazov na absolútne?
erefinho
Profil *
Ak mám tie adresy už v tvare stranka.sk/nieco/druha, ale Google má zaindexované ešte tie staré (stranka.sk/index.php?sekcia=nieco&stranka=druha), treba ešte nejak zabezpečiť presmerovanie zo starých na nové, aby to nebral ako 2 rôzne stránky?
Davex
Profil
Zkus si upravit první příklad ze stránky Mod_rewrite - příklady.
erefinho
Profil *
Takto som to urobil podľa toho príkladu a funguje mi to:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^sekcia=([^&]+)$
RewriteRule ^index\.php$ %1? [R=301,L]
RewriteRule ^([^/]+) index.php?rw=1&sekcia=$1 [L,QSA]


Ale ak tam chcem mať viac premenných (stranka.sk/nieco/druha), tak to už neviem spraviť. Skúšal som to urobiť napríklad tak, že som dal pod to nasledujúci kód, ale nefunguje to:

RewriteCond %{QUERY_STRING} ^sekcia=([^&]+)&stranka=([^&]+)$
RewriteRule ^index\.php$ %1&%2? [R=301,L]
RewriteRule ^([^/]+)/([^/]+) index.php?rw=1&sekcia=$1&stranka=$2 [L,QSA]


A opäť mám problém s obrázkami, ktoré majú takýto tvar:
<img src="/images/obr.gif"...
Neviem, prečo sa to nezobrazuje. Je to od koreňového adresára.
Davex
Profil
Je chyba v pravidle pro přesměrování:
RewriteRule ^index\.php$ %1/%2? [R=301,L]

Pokud nechceš přepisovat některé známé adresáře, tak přidej vylučující podmínku.
erefinho
Profil *
To lomítko nepomohlo. Ale upravil som kód, ktorý bol v tej diskusii, kde je aj vylučujúca podmienka a už mi to funguje. Ale tie obrázky a .css stále nie. :( Obrázky majú cesty takéto <img src="/images/obr.gif"... a súbor styl.css mám iba jeden a je v rootu webu. Odkaz je takýto <link href="/styl.css" rel="stylesheet" type="text/css">. Keďže súbor css mám iba 1, tak tam dám aj absolútnu adresu.

Teraz to vyzerá takto:

RewriteEngine On

RewriteBase /

RewriteCond %{QUERY_STRING} ^sekcia=(.*)&stranka=(.*)
RewriteRule ^index\.php$ %1/%2? [R=301,L,NE]
RewriteRule ^(.*)/(.*)$ index.php?rw=1&sekcia=$1&stranka=$2 [L,QSA]

RewriteCond %{QUERY_STRING} ^sekcia=(.*)
RewriteRule ^index.php$ %1? [R=301,L,NE]
RewriteRule ^(.*)$ index.php?rw=1&sekcia=$1 [L,QSA]

RewriteCond  %{REQUEST_URI}  !^/(css|img)/
RewriteRule ^(.*)/(.*)$ index.php?rw=1&sekcia=$1&stranka=$2 [L,QSA]

RewriteCond  %{ENV:REDIRECT_STATUS}  =""  
RewriteCond  %{REQUEST_URI}  !^/(css|img)/
RewriteRule  ^(.*)$  index.php?rw=1&sekcia=$1  [L,QSA]


Presmerovanie a rewrite fungujú, obrázky a .css nie.
Davex
Profil
Obrázky máš v jiném adresáři, takže musíš samozřejmě musíš upravit regulární výraz v podmínkách + přidat CSS soubory:
RewriteCond  %{REQUEST_URI}  !^/(?:(images|styles)/|.+\.css$)

Dále bych ponechal regulární výrazy ...sekcia=([^&]+)... a ...^([^/]+)..., jak jsi je měl předtím.
erefinho
Profil
Vďaka, už som aj to vyriešil. Ale vyskytol sa ďalší problém. :) S úvodnou stránkou (stranka.sk). Tam sa mal naincludovať nejaký súbor (mám tam niečo také if($_GET['sekcia']=="") include("uvod.php"); ), ale nenaincludoval sa. Aj menu sa malo naincludovať a nechce sa. Predtým mi to nerobilo, tak asi to súvisí s týmto presmerovaním.
Davex
Profil
Na vkládání souborů s relativní cestou nemá přepis adres vliv. Zkus tu podmínku takto:
if (empty($_GET['sekcia']))
  include("./uvod.php");
erefinho
Profil
Ani tak to nefunguje. Ale ak do htaccessu dam namiesto ...sekcia=([^&]+)... ...sekcia=(.*)... tak to funguje. Iba menu nefunguje ani vtedy, ale to je robené komplikovanejším spôsobom.
Davex
Profil
V pravidlech [#8] smaž 7. a 11. řádek, které jsou nahrazeny řádkami 13-18.

Pak si ještě vypiš obsah pole $_GET po přepisu. Na úvodní stránce s adresou http://www.example.com/ by mělo být nastaveno rw=1 a prázdné sekcia.
erefinho
Profil
Davex:
Pak si ještě vypiš obsah pole $_GET po přepisu. Na úvodní stránce s adresou http://www.example.com/ by mělo být nastaveno rw=1 a prázdné sekcia.
Ako si to myslel? Ja som tam pridal toto:
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^$ index.php?rw=1 [L,QSA]

a problém s úvodnou stránkou som vyriešil, ale vznikol ďalší. :) Jeden odkaz smeruje na phpbb fórum (example.com/forum/) a ten nefunguje.
Davex
Profil
Myslel jsem to tak, že si máš zkontrolovat předávané proměnné, protože s touto kombinací asi skript nepočítá.

Adresář pro fórum přidej do podmínek:
RewriteCond  %{REQUEST_URI}  !^/(?:(images|styles|forum)/|.+\.css$)
erefinho
Profil
Mám to približne takto:

RewriteEngine On

RewriteBase /
RewriteCond %{QUERY_STRING} ^sekcia=([^&]+)&stranka=([^&]+)&ps=([^&]+)
RewriteRule ^index\.php$ %1/%2/%3? [R=301,L,NE]
RewriteCond  %{REQUEST_URI}  !^/(?:(images|styles|forum)/|.+\.css$|.+\.js$)
RewriteRule ^([^&]+)/([^&]+)/([^&]+)$ index.php?rw=1&sekcia=$1&stranka=$2&ps=$3 [L,QSA]

RewriteCond %{QUERY_STRING} ^sekcia=([^&]+)&stranka=([^&]+)
RewriteRule ^index\.php$ %1/%2? [R=301,L,NE]
RewriteCond  %{REQUEST_URI}  !^/(?:(images|styles|forum)/|.+\.css$|.+\.js$)
RewriteRule ^([^&]+)/([^&]+)$ index.php?rw=1&sekcia=$1&stranka=$2 [L,QSA]

RewriteCond %{QUERY_STRING} ^sekcia=([^&]+)
RewriteRule ^index\.php$ %1? [R=301,L,NE]
RewriteCond  %{ENV:REDIRECT_STATUS}  =""
RewriteCond  %{REQUEST_URI}  !^/(?:(images|styles|forum)/|.+\.css$|.+\.js$)
RewriteRule ^([^&]+)$ index.php?rw=1&sekcia=$1 [L,QSA]

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^$ index.php?rw=1 [L,QSA]


A zatiaľ som na žiadnu chybu nenarazil od poslednej úpravy... :)
erefinho
Profil
Síce to trvalo, ale našiel som chybu, s ktorou si neviem rady. :)

Pod RewriteEngine On mám ešte kod na presmerovanie na adresy bez www

RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule (.*) http://example.com/$1 [R=301]


Ale nefunguje to. Stránka nebude nájdená. Chyba bude v tomto:

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^$ index.php?rw=1 [L,QSA]


Týmto som chcel dosiahnuť, aby sa zobrazovala úvodná stránka example.com. Ako sa to dá opraviť?
Davex
Profil
Po zadání adresy example.com do prohlížeče stránka funguje? Mohlo by pomoci přidání příznaku L:
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule (.*) http://example.com/$1 [R=301,L]
erefinho
Profil
Už to funguje, vďaka.
erefinhoho
Profil *
Chcel som tam ešte pridať presmerovanie z example.com/nieco/stranka na example.com/nieco/stranka2 a urobil som to podľa toho:
RewriteRule   pozadovany-soubor\.html   /vysledny-soubor.html   [R]

na
RewriteRule   nieco/stranka /nieco/stranka2 [R]

Prečo mi to nefunguje?
Davex
Profil
erefinhoho:
Nefunguje to proto, protože regulárnímu výrazu vyhovuje u cíl přepisu. Mělo by stačit přidání začátku + konce výrazu a flagu L:
RewriteRule   ^nieco/stranka$ /nieco/stranka2 [R,L]
erefinhoho
Profil *
Stále mi to nejde. Upresním to: chcem aby sa mi to presmerovalo zo stránky example.com/nieco/aaa na example.com/nieco/bbb.
Davex
Profil
Pokud si mám pod nieco představit opravdu cokoliv, co se bude měnit, a na konci bude stále stejné aaa, které se změní na bbb, tak třeba takto:
RewriteRule   ^(.+)/aaa$ /$1/bbb [R,L]

Jinak nevím, co přesně chceš. Může záležet i na pořadí - dej toto pravidlo před ostatní.
erefinhoho
Profil *
Dal som to pred ostatné a už to funguje! :)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0