Diskuze: Jak napsat odkaz, abych po rozkliknutí viděl stranka.com/en, nikoliv stranka.com/en.html
V předchozím kvízu, Online test znalostí HTML a CSS, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí HTML a CSS, jsme si ověřili nabyté zkušenosti z kurzu.
Tavá otázka nemá úpně triviální odpověď. Na úrovni html je to docela jednoduché stačí přpsat
href="en.html"
na
href="en"
ale tím tvá práce neskončí. Pak budeš muset nastavit webový server (nginx, apache, ...) tak, aby ro url web.com/en vracel soubor en.html. To není není standartní chování a poteřba zěnit konfiguraci serveru. Další možností by bylo na serveru použít nějaký scriptovací jazyk (php, ruby, python ...). Pokud chceš provozovat stránky jenom za pomoci čistého html a css na nějakém sdíleném hostingu obávám se, že se toho .html nezbavíš.
Ahoj,
já tam vidím 2 věci, pokud to budeš dělat čistě v html, asi by šel nastavit .htaccess aby vracel, jak požaduješ, nebo udělat složku en, kde bude index.html, pokud tedy potom někdo klikne na cestu /en apache otevře automaticky index.html
Druhá cesta je jít přes PHP, v .htaccess se nastaví, že vše bude obsluhovat index.php a pak už je jen na tomto souboru jak zpracuje jakoukoliv cestu a co s ní udělá, toto řešení bych pro normální web doporučil.
web.com/en.html.
index.html
---
web.com/en = web.com/en/index.html, pokud mas nastaveno php, pak
web.com/en = web.com/en/index.php
---
... pokud to chces presmerovat na en.html
web.com/en/index.html
<meta http-equiv="refresh" content="5;url=http://web.com/en.html">
A samozrejme presmerovani je lepsi delat pres soubor .htaccess nebo v
nastaveni serveru.
google = htaccess language relocate
https://forums.mobirise.com/…ith-htaccess
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ http://la-combe.com/en/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ http://la-combe.com/de/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ http://la-combe.com/nl/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ http://la-combe.com/fr/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^es [NC]
RewriteRule ^$ http://la-combe.com/es/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|de|nl|fr|es)/?$ index.php?lang=$1 [QSA,NC,L]
# Check domain (1), browser language (2) and redirect to subdirectory (3)
RewriteCond %{HTTP_HOST} .*la-combe.com [NC]
RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ http://%{HTTP_HOST}/ [L,R=301]
RewriteCond %{HTTP_HOST} .*la-combe.com [NC]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^$ http://%{HTTP_HOST}/fr/ [L,R=301]
# Fallback for any other language to english
RewriteCond %{HTTP_HOST} .*la-combe.com [NC]
RewriteRule ^$ http://%{HTTP_HOST}/en/ [L,R=301]
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (nl) [NC]
RewriteRule ^/?$ /mbr-lang/nl/ [R=301,L]
RewriteCond %{HTTP:Accept-Language} (bg) [NC]
RewriteRule ^/?$ /mbr-lang/bg/ [R=301,L]
RewriteCond %{HTTP:Accept-Language} ((aa|ab|af|am|ar|as|ay|az|ba|be|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo|fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo|zh|zu)) [NC]
RewriteRule ^/?$ /mbr-lang/en/ [R=301,L]
javascript jquery kod na presmerovani
<script>
$( document ).ready(function(){
var userLang = navigator.language || navigator.userLanguage;
if (userLang == "nl") {
break;
}
else if(userLang == ''fr"){
window.location.href = "www.la-combe.com/fr"
}
else {
window.location.href = "www.la-combe.com/en"
}
});
</script>
Lidi co řešíte?
Pokud jde o web který má jen HTML stránky, tak lze přes .htaccess mod rewrite to .html úplně jednoduše globálně skrýt.
Viz např.: https://www.plothost.com/…th-htaccess/
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
Mysíš takto? Soubory jsou en.html a de.html
Tento kód mi zatím nefunguje
RewriteEngine on
RewriteCond %{request_en.html} !-d
RewriteCond %{request_en.html}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
Asi sis o htaccess nic neprecetl nebo neumis kopirovat kod, ani jsi nepochopil, co to dela. nebo jsi proste liny pouzit google nebo si neco o tom precist, coz je pomerne smutne u nekoho, kdo neco potrebuje a neni ochotny pro to neco obetovat.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
# rewrite condition = prepis podle podminek
# prepisuje se url
# % = znamena vsechny znaky v jakemkoliv mnozstvi
# {REQUEST_FILENAME} = znamena jmeno souboru, request je odeslany pozadavek, url adresa; REQUEST_FILENAME je promena, kterou ziskas parsovanim url https://httpd.apache.org/docs/trunk/mod/mod_rewrite.html#rewritecond
# -d Is directory.
# -f Is regular file.
# ! = not
# %{REQUEST_FILENAME}
# http://..../jmeno_souboru.html ->jmeno_souboru.html
# %{REQUEST_FILENAME}\.html
# http://..../jmeno_souboru.html ->jmeno_souboru
Coz je presne to, co asi potrebujes, vybrat z adresy pomoci regularniho vyrazu jmeno souboru
RewriteCond %{REQUEST_FILENAME}\.html -f
# %{REQUEST_FILENAME} !-d
# http://..../en -> en
# http://..../en/ -> ignoruje, protoze en/ je directory
# %{REQUEST_FILENAME}\.html -f
# http://..../en.html -> en
# Cili, oba ty vyrazy vyberou text z adresy na konci a dalsi prikaz s tim neco udela.
RewriteRule ^(.*)$ $1.html [NC,L]
A pro vybrany vyraz prepis adresu
^ zacatek stringu
$ konec stringu
(.*) vsechny znaky
Nahrad je stringem $1.html
$1 je vybrany vyraz z adresy prikazem RewriteCond, ktery je "en" (1 = prvni, muzes mit vic vyrazu, ktere te zajimaji)
.html je string ".html",
takze to nahradi url za "en.html"
Cele to tedy dela jen to, ze najdi v adrese nejaky text, podle podminek a uprav adresu na jinou, treba s pomoci toho nalezeneho textu.
https://www.jakpsatweb.cz/…rewrite.html
https://www.jakpsatweb.cz/…riklady.html
https://www.jakpsatweb.cz/…erovani.html
https://httpd.apache.org/…mapping.html - oficialni
dokumentace
TL;DR: Dostaneš požadavek např. https://domena.cz/abcd
RewriteCond %{REQUEST_FILENAME} !-d
Je podmínka, která zjistí, že požadovaná adresa (v tomto případě abcd) není složka.
RewriteCond %{REQUEST_FILENAME}\.html -f
Je podmínka, která zjistí, že když k požadované adrese (v tomto případě abcd) přidáš .html => že najdeš existující soubor. Tedy pokud je požadavek https://domena.cz/abcd, zjistí, jestli existuje https://domena.cz/abcd.html.
RewriteRule ^(.*)$ $1.html [NC,L]
A nakonec, toto je pravidlo (výše uvedené byly pouze podmínky), které zajistí, že když zadáš /abcd, dostaneš /abcd.html.
Veškeré výše uvedené řádky jsou plně automatické, pracuje se globálně s HTTP požadavkem, nikoliv s konkrétními názvy souborů (tedy žádné přepisování na %{request_en.html}!). Pokud to jen zkopíruješ a vložíš a nesáhneš na to, bude to fungovat.
Zobrazeno 8 zpráv z 8.