Autor Zpráva
Milkys
Profil
Zdravím všechny a žádám o psychickou podporu.
Vyzkoušel jsem za dnešek několik pokusů (jinak se tomu říci nedá), ale bez úspěchů.

Potřebuji přesměrovat
např.
subdomena.domena.cz/index.php?navigace=2
nebo
subdomena.domena.cz/index.php?navigace=2258

na
subdomena.domena.cz/2
nebo na
subdomena.domena.cz/2258

apod.

Nemá s tím někdo zkušenosti? A chtěl by se o tyto zkušenosti podělit?
Předem děkuji.
Davex
Profil
Pro své potřeby si můžeš přizpůsobit řešení z Přesměrování starých url na nové hezké url. Potřebné základy najdeš popsané na http://www.jakpsatweb.cz/server/mod-rewrite.html.
Milkys
Profil
Už jsem to četl několikrát i jiné weby na toto téma. Přesměrování starých na nové bych použil (nerad) až když nic nepomůže.

Třeba tento dnes asi 254. pokus (omyl):

RewriteEngine On
RewriteBase /
Options +FollowSymlinks
RewriteCond $0 !^(favicon\.ico|robots\.txt|img(/.*)?)$
RewriteRule .* index.php?navigace=$0


Stránka se zobrazí jako kdybych ve webDeveloperu vypnul css a nefungují odkazy, resp. url odkazu z menu v adresním řádku je hezká, protože jsem ji změnil do příslušné podoby, ale zůstane zobrazená homepage i když jsem kliknul na odkaz např.
subdomena.domena.cz/157.

Tohle už je zoufalost.
Mastodont
Profil
Co třeba použít obyčejné
RewriteCond %{REQUEST_FILENAME} !.(jpg|jpeg|png|gif)$
RewriteRule ^/(.*)$ /index.php [QSA,L] 


a uvnitř index.php si rozparsovat $_SERVER["REQUEST_URI"] ?
Milkys
Profil
Domníval jsem se, že asi budu muset udělat ještě něco uvnitř webu. Je to můj 1. projekt v php a proto bych uvítal nějaký příklad rozparsování $_SERVER["REQUEST_URI"] nebo odkaz kde se to mohu naučit - nevím co hledat.
Jinak děkuji za reakci.
Mastodont
Profil
Rozparsovat = rozložit na jednotlivé části, třeba
$url_array = explode( '/', $_SERVER["REQUEST_URI"] );
Milkys
Profil
hm tak jestli tomu dobře rozumím tak to mám. Je to ono?

if (!IsSet($_GET['navigace'])) 
   $_GET['navigace']= ''; // přesměrování na home 

$navigace = explode("-", $_GET['navigace']); 
if (!IsSet($navigace[0]))
   $navigace[0]='';
$key_nav = $navigace[0];

if (!IsSet($navigace[1]))
   $navigace[1]='';
$kategorie = $navigace[1];

if (!IsSet($navigace[2]))
   $navigace[2]='';
$pobyt = $navigace[2];

if ($navigace[0]!='' and $navigace[1]=='' and $navigace[2]=='' and is_numeric($navigace[0])) {
$pobyt = $navigace[0]; 
$key_nav = '';
}

if (!is_numeric($navigace[0])){
  if (IsSet($navigace[0]))
    $kategorie = $navigace[0];
  if (IsSet($navigace[1]))
    $key_nav = $navigace[1];
  if (IsSet($navigace[2]))
    $pobyt = $navigace[2];    
}
CZechBoY
Profil
  if (IsSet($navigace[0]))
    $kategorie = $navigace[0];
  if (IsSet($navigace[1]))
    $key_nav = $navigace[1];
  if (IsSet($navigace[2]))
    $pobyt = $navigace[2];

to vůbec nechápu.. však o pár řádků výš všechny tyhle hodnoty nastavuje pokud nejsou nastavený..
Milkys
Profil
To mi udělá následující adresy:
subdomena.domena.cz/index.php?navigace=2-delkapobytu
subdomena.domena.cz/index.php?navigace=spa-Nějaké+Město
subdomena.domena.cz/index.php?navigace=238-pobyt-Nějaký+Název+pobytu
subdomena.domena.cz/index.php?navigace=wellnesshotel-Nějaký+Název+Hotelu

a mě stačí toto:
subdomena.domena.cz/2-delkapobytu
výpis pobytů o určitém počtu dní
subdomena.domena.cz/spa-Nějaké+Město
výpis pobytů v daném městě
subdomena.domena.cz/238-pobyt-Nějaký+Název+pobytu
detail 1 pobytu
subdomena.domena.cz/wellnesshotel-Nějaký+Název+Hotelu
výpis pobytů vybraného 1 hotelu

Diakritiku nechám být (četl jsem i viděl, že i wiki je s diakritikou jen místo + má _ - nemělo by to mít vliv jestli je tam +), všechny mé weby jsou bez diakritiky s pomlčkami na předních pozicích ve vyhledávačích tak mě zajímá jak si to povede s diakritikou. Seznam údajně diakritiku "umí" jestli se nepletu od května 2011. Tak uvidíme.
Davex
Profil
Milkys:
Stránka se zobrazí jako kdybych ve webDeveloperu vypnul css
Pokud máš styly v externím stylopisu, tak je to možná tím, že se přepisují na skript index.php a k externím stylopisům se tedy prohlížeč nedostane. Měl by přepisovat jen URL, která nevedou k žádnému souboru, což lze zařídit přidáním podmínky před přepisovací pravidlo
RewriteCond %{REQUEST_FILENAME} !-f

nefungují odkazy, resp. url odkazu z menu v adresním řádku je hezká, protože jsem ji změnil do příslušné podoby, ale zůstane zobrazená homepage i když jsem kliknul na odkaz
Nějak jsem se v tom ztratil. Takže tvůj problém je v tom, že když v prohlížeči zadáš URL subdomena.domena.cz/něco-oddělené-pomlčkami, tak se skriptu index.php nepředá parametr navigace=něco-oddělené-pomlčkami? Když si na začátku skriptu uděláš kontrolní výpis proměnné $_GET['navigace'], tak má správnou hodnotu?
Milkys
Profil
Davex:
ano mám je samozřejmě externě v
subdomena.domena.cz/css/styly.css
javascripty také
subdomena.domena.cz/js/neco.js

Více mě trápí to, že se nezobrazí co má a zůstane to "viset" na homepage.

Nějak jsem se v tom ztratil
když v prohlížeči zadám např.

subdomena.domena.cz/spa-Nějaké+Město

se nezobrazí obsah, který se zobrazoval bez .htaccess po zadání

subdomena.domena.cz/index.php?navigace=spa-Nějaké+Město

to "spa-" je jakoby kategorie (zapsané ve switch jako jedno z case) a "Nějaké+Město" je urlencode (název města) vytažené z xml pomocí simplexml xpath
tzn. může být:
subdomena.domena.cz/spa-Nějaká+Díra+nad+Řekou
nebo také
subdomena.domena.cz/spa-Město

Kontrolní výpis má správnou hodnotu. Když jsem např na:
subdomena.domena.cz/index.php?navigace=spa-Nějaké+Město
a vy echuju $key_nav (což je jakoby kategorie pro "spa" zobrazí se Arrayspa. Snad jsem to pochopil správně - jsem začátečník s php.
Davex
Profil
Milkys:
Kontrolní výpis má správnou hodnotu. Když jsem např na:
subdomena.domena.cz/index.php?navigace=spa-Nějaké+Město
A co ukáže kontrolní výpis $_GET['navigace'] při zadání subdomena.domena.cz/spa-Nějaká+Díra+nad+Řekou a s pravidly podle [#3]?
Milkys
Profil
Davex:
na homepage v adresním řádku zadáno subdomena.domena.cz/index.php
Arrayindex.php

v adresním řádku zadáno subdomena.domena.cz
Arrayindex.php

v adresním řádku zadáno subdomena.domena.cz/spa-Nějaká+Díra+nad+Řekou také
Arrayindex.php
a správně by mělo být
asi Arrayspa

proto mi to zůstává na homepage a samozřejmě nenastylované z ext. .css.
Davex
Profil
Takže máš úplně na začátku skriptu index.php řádky
<?php
  echo $_GET['navigace'], '<br>';
  echo 'Obsah parametru navigace: ', $_GET['navigace'], ' $<br>';  // lepší varianta, abys viděl kde to začíná a končí
  echo 'Volaná cesta: ', $_SERVER['REQUEST_URI'], ' $<br>';  // a ještě k tomu výpis REQUEST_URI
  

a pokaždé to vypisuje Array...?
Milkys
Profil
na začátku index.php mám includovaný navigace.php.
Pokud to vložím tak jak říkáš na začátek, před include navigace.php zobrazí se toto:
index.phpObsah parametru navigace: index.php $
i v případě, že v adr. ř. mám subdomena.domena.cz/spa-Nějaká+Díra+nad+Řekou .

Pokud to vložím do navigace.php na 5. řádek kodu #7

tak je to také úplně stejné.
Milkys
Profil
á že by?
Nyní v případě, že v adr. ř. mám subdomena.domena.cz/spa-Nějaká+Díra+nad+Řekou to vypíše:

index.php
Obsah parametru navigace: index.php $
Volaná cesta: /spa-Nějaká+Díra+nad+Řekou $

Jo a mám to vložené na tom 5. řádku kodu #7 . To samé, když to je před include navigace.php na zač. index.php
Kajman_
Profil *
Ve druhém kole přepisu se do parametru dostane ten index.php, na který bylo přepsáno v prvním kole. Ošetřete pravidla, aby se kromě obrázků atp. nepřepisoval ani index.php.
Milkys
Profil
Hoši mě to asi jede.

RewriteEngine On
RewriteBase /
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^index.php http://pobyty.awellness.cz/ [R=301,QSA,L]
RewriteCond $0 !^(favicon\.ico|robots\.txt|img(/.*)?)$
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php?navigace=$0


Ještě to projedu a jestli to bude dobrý tak písnu.

Vypadá to, že to funguje.

Děkuji mnohokrát všem co měli se mnou trpělivost.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0