

.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.
Dej před css lomítko:
bude to pak brát všude cestu www.example.com/css/default.css
a v .htaccess před RewriteRule dej podmínku RewriteCond vylučující v REQUEST_URI tu složku css nebo jen ten soubor /css/default.css (jak na to si najdi na googlu).
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 tady už to samozřejmě funguje špatně, protože když jsem na stránce
tak výše uvedený odkaz linkuje na adresu:
ale správně má být
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ě:
Takže prohlížeč odstraní poslední lomítko a znaky za ním a přidá hodnotu relativního odkazu.
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.
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:
![[N0HIzXp.png]](https://i.imgur.com/N0HIzXp.png)
<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:
"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:
Toto je kořenový odkaz:
Toto je absolutní odkaz:
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