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 |
#2 · Zasláno: 28. 3. 2010, 18:52:33
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 * |
#3 · Zasláno: 28. 3. 2010, 21:15:36
Á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?
|
||
Časová prodleva: 10 dní
|
|||
erefinho Profil * |
#4 · Zasláno: 7. 4. 2010, 17:14:52
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 |
#5 · Zasláno: 9. 4. 2010, 19:41:42
Zkus si upravit první příklad ze stránky Mod_rewrite - příklady.
|
||
erefinho Profil * |
#6 · Zasláno: 9. 4. 2010, 23:04:46
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 |
#7 · Zasláno: 10. 4. 2010, 12:47:58 · Upravil/a: Davex
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 * |
#8 · Zasláno: 10. 4. 2010, 14:59:12
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 |
#9 · Zasláno: 10. 4. 2010, 16:52:52
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 |
#10 · Zasláno: 10. 4. 2010, 19:22:06
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 |
#11 · Zasláno: 10. 4. 2010, 19:43:41
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 |
#12 · Zasláno: 10. 4. 2010, 20:03:56
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 |
#13 · Zasláno: 10. 4. 2010, 20:38:40
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 h>ttp://www.example.com/ by mělo být nastaveno rw=1 a prázdné sekcia. |
||
erefinho Profil |
#14 · Zasláno: 10. 4. 2010, 21:16:46 · Upravil/a: erefinho
Davex:
„Pak si ještě vypiš obsah pole $_GET po přepisu. Na úvodní stránce s adresou ht>tp://w>ww.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 |
#15 · Zasláno: 10. 4. 2010, 21:27:52
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 |
#16 · Zasláno: 10. 4. 2010, 21:51:10 · Upravil/a: erefinho
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... :) |
||
Časová prodleva: 6 dní
|
|||
erefinho Profil |
#17 · Zasláno: 16. 4. 2010, 20:11:33
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 |
#18 · Zasláno: 18. 4. 2010, 13:35:36
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 (.*) h>ttp://example.com/$1 [R=301,L] |
||
erefinho Profil |
#19 · Zasláno: 18. 4. 2010, 13:57:14
Už to funguje, vďaka.
|
||
Časová prodleva: 9 dní
|
|||
erefinhoho Profil * |
#20 · Zasláno: 27. 4. 2010, 14:49:20
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 |
#21 · Zasláno: 27. 4. 2010, 20:37:31
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 * |
#22 · Zasláno: 27. 4. 2010, 21:44:34
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 |
#23 · Zasláno: 27. 4. 2010, 22:21:57
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 * |
#24 · Zasláno: 27. 4. 2010, 23:26:42
Dal som to pred ostatné a už to funguje! :)
|
||
Časová prodleva: 14 let
|
0