Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno .htaccess and Rewrite

Zdravíčko,

snažím se po x letech vytvořit nějaké stránky a nemůžu přijít na řešení jednoho problému. Používám RewriteEngine kvůli pěkným URL:

soubor .htaccess

RewriteEngine On
RewriteRule ^([^.]+)$ %{DOCUMENT_ROOT}/index.php?id=$1 [L,QSA]

Takže když zadám adresu www.example.com/galerie, převede se to na:

www.example.com/index.php?id=galerie

Když zadám adresu www.example.com/galerie/podzim-2017, převede se to na:

www.example.com/index.php?id=galerie/podzim-2017

V index.php si už z toho vykuchám co potřebuju, ale problém je v tom, že všechny odkazy na webu mají relativní hodnoty, např.:

<link rel="stylesheet" type="text/css" href="css/default.css">

Takže nastane problém v tom, že to třeba CSS styly hledá na adrese

http://www.example.com/galerie/css/default.css

jenže tam styly nejsou, protože jsou "o úroveň výš".

Nemá někdo nějaký nápad, jak to vyřešit přes .htaccess? Fakt se mi nechce přepisovat celý web na absolutní adresy.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Dej před css lomítko: <link rel="stylesheet" type="text/css" href="/css/default.css"> bude to pak…
kacikac 19.11.2017 03:32
kacikac
S tím CSS to byl pouze příklad. Když před to dám lomítko, tak to funguje, CSS se načte na všech strá…
Gaddy 19.11.2017 11:46
Gaddy
Šak to druhé řeší právě ten RewriteCond. Prostě v RewriteCond uvedeš podmínku co se má/nemá převádět…
kacikac 19.11.2017 13:50
kacikac
Jednoduše zajedu na stránku www.example.com/galerie/, kde jsou alba, tam kliknu na odkaz podzim-2017…
Gaddy 19.11.2017 15:29
Gaddy
Toto: <a href="/vytvorit-galerii">Vytvořit galerii</a> je ale absolutní odkaz, respektive relativní…
kacikac 19.11.2017 15:57
kacikac
"je ale absolutní odkaz, respektive relativní k doméně" <- tak tímhle si pobavil nebo zvedl ze židle… poslední
Gaddy 19.11.2017 16:59
Gaddy

S tím CSS to byl pouze příklad. Když před to dám lomítko, tak to funguje, CSS se načte na všech stránkách bez ohledu na úroveň, ALE třeba odkazy v menu mám ve stylu:

<a href="/vytvorit-galerii">Vytvořit galerii</a>

a tady už to samozřejmě funguje špatně, protože když jsem na stránce

www.example.com/galerie/podzim-2017

tak výše uvedený odkaz linkuje na adresu:

www.example.com/galerie/vytvorit-galerii

ale správně má být

www.example.com/vytvorit-galerii

Doufám, že teď jsem to osvětlil úplně všem přispěvatelům :-)

Šak to druhé řeší právě ten RewriteCond.
Prostě v RewriteCond uvedeš podmínku co se má/nemá převádět na /index.php?id=
Buď tam zadáš co se má převádět nebo co se nemá převádět, já uvedl to druhé.
Pokud dáš dotaz na apache, tak jak to máš teď, tak apache nemůže vědět co převádět nechceš na /index.php?id=, bude převádět všechno ať mu tam nastavíš link jaký chceš. Pokud nechápeš co jsem napsal, tak já už nevím jak ti to vysvětlit.
Jo a stejně nechápu jak ti toto:
<a href="/vytvorit-galerii">Vytvořit galerii</a>
může něco přesměrovávat sem:
www.example.com/galerie/vytvorit-galerii
to je nesmysl.

Jednoduše zajedu na stránku www.example.com/galerie/, kde jsou alba, tam kliknu na odkaz podzim-2017, takže v řádku s URL bude www.example.com/galerie/podzim-2017
Přes .htaccess dostanu index.php?id=galerie/podzim-2017, což je v pohodě, to mám ošetřené. A pak nahoře v menu kliknu na odkaz "Vytvořit galerii", který je zadaný relativně:

<a href="/vytvorit-galerii">Vytvořit galerii</a>

Takže prohlížeč odstraní poslední lomítko a znaky za ním a přidá hodnotu relativního odkazu.

www.example.com/galerie/podzim-2017 -> www.example.com/galerie/vytvorit-galerii

Relativní odkaz se totiž vždy vztahuje k aktuální adrese, ale adresa www.example.com/galerie/vytvorit-galerii jaksi neexistuje.

Naštěstí jsem to již vyřešil způsobem, který je velice triviální, že nechápu, proč mě to nenapadlo hned.

<base href="https://www.example.com/">

Když je v hlavičce zadaný tento tag, tak se všechny relativní odkazy skládají ve tvaru BASE + RELATIVE-LINK

Triviální, jednoduché, ale vzpomenout si ...

Toto:
<a href="/vytvorit-galerii">Vytvořit galerii</a>
je ale absolutní odkaz, respektive relativní k doméně.
To lomítko na začátku právě uvádí, že se ta cesta bere od www.example.com, takže bude:
www.example.com/vytvorit-galerii
a ne jak ty uvádíš:
www.example.com/galerie/vytvorit-galerii
Takže je nesmyslné tam cpát to tvé:
<base href="https://www.example.com/">
ale jak myslíš, když si myslíš to co si myslí, tak si to mysli :-)
Já z tebou čas už ztrácet nebudu, snažil jsem ti to vysvětlit už několikrát.
A tu máš důkaz:
[N0HIzXp.png]

"je ale absolutní odkaz, respektive relativní k doméně" <- tak tímhle si pobavil nebo zvedl ze židle nejen všechny programátory, ale i češtináře
Neexistuje nic, co by bylo absolutní a zároveň relativní.

Toto je relativní odkaz:

<a href="jmeno-stranky">odkaz</a>

Toto je kořenový odkaz:

<a href="/jmeno-stranky">odkaz</a>

Toto je absolutní odkaz:

<a href="http://www.example.com/jmeno-stranky">odkaz</a>

Abych to tedy uvedl na pravou míru, tak jsem *****. Napsal jsem správně, že používám relativní odkazy, ale do příkladu jsem uvedl kořenový odkaz. Takže jsem vše (cca 150 odkazů) převedl na kořenové odkazy a už to frčí i bez BASE značky. Díky za správnou radu Kacikac, i když jsem ji napoprvé nepochopil :-)

Zpět do poradny Odpovědět na původní otázku Nahoru