Autor Zpráva
Petra
Profil
Prosím, potřebuju, aby se při zápisu adresy ve tvaru example.com/neco doplnilo lomitko na tvar example.com/neco/. Tím myslím doplnilo přímo v adresním řádku. Dělá se to normálně nějakým přesměrovávacím skriptem nebo se to nastavuje někde na serveru? Nebo jak na to? (Vyvsětlovat prosím polopaticky) Dík.
izsak
Profil
Nejaký server vám to nerobí? Pokiaľ viem, tak to funguje na Apache aj IIS automaticky.
Vít Dlouhý
Profil
Funguje to automaticky.
Petra
Profil
Určitě? Vždycky? Mně to teda nefunguje :-(
Yuhů
Profil
mějme adresu ve tvaru

doména.cz/adresář/něco

pokud se v adresáři adresář nachází objekt se jménem něco, tak je poskytnut. To mohou být tři věci.

1. soubor. Ano, soubory nemusejí mít příponu, "něco" může být soubor.
2. symlink jménem "něco". Skoro totéž, co zástupce. Pokud je na serveru povoleno sledování symlinků, symlink se sleduje.
3. adresář. Pokud se v adresáři adresář nachází podadresář jménem "něco" (a není tam stejnojmenný soubor nebo symlink), server adresář vezme. V tom případě doplní koncové lomítko na
doména.cz/adresář/něco/

a pak teprve hledá startovní soubor (index.html).
Petra
Profil
Jak říkám, vážně bych ráda doplnila lomítko a to skutečně a viditelně, ne jen aby se to chovalo, jako kdyby tam lomítko bylo. Se zobrazením příslušného souboru žádný problém nemám.

V adresáři se objekt jménem něco nenachází, fakticky se tamnenachází ani "adresář", adresy jsou řešené přes mod_rewrite.

Takže abych ještě jednou lépe popsala problém. Jde o to, že:
uživatel napíše do adresního řádku doména.cz/adresář ... a vyhodí mu to správnou stránku. Nicméně na té stránce jsou odkazy, a to ve tvaru <a href="něco.htm">. Takový odkaz má pak přece směřovat do stejného adresáře, v jakém je ten soubor, ze kterého je odkazováno. A podle mně nemůže bez toho lomítka tušit, jestli je "adresář" skutečně adresář nebo soubor. Myslím, že to bere jako soubor, tudíž odkaz povede na doména.cz/něco.htm místo doména.cz/adresář/něco.htm

Omlouvám se, jestrli to vysvětluju špatně i za svojí nechápavost a za to, že se nechci nechat přesvědčit, že to funguje, ale skutečně mi to nefunguje :-)
llook
Profil
To bude asi nějak souviset s tím mod_rewrite, protože Apache mě při požadavku na "/adresář" přesměruje kódem 301 na "/adresář/". Ale také to může být nějakým nastavením Apache.
Na úrovni PHP bych to řešil nejspíš nějak takhle:
<?php
$pozadovana_cesta = '/adresář/';
if ($_SERVER['REQUEST_URI'] != $pozadovana_cesta) {
header ("HTTP/1.1 301 Moved Permanently");
header('Location: http://'.$_SERVER['HTTP_HOST'].$pozadovana_cesta);
}
?>
otec jiří
Profil *
mám stejnej problém jako tady petra, nechápu že jste to ještě nikdo nevysvětlil co s tím...mě to dělá to samé...bude to nekde nejaká volba...ale kdo ví jaká....
Petra
Profil
otec jiří: Už jsem to vyřešila tak, že do .htaccess za příslušné rewritovací pravidlo pro verzi s lomítkem dám redirect pro verzi bez lomítka, tj. např.:

RewriteRule ^([a-zA-Z0-9-]+)$ /$1/ [R]
otec jiří
Profil *
Moc se omlouvám, ale nechápu to....prosím vysvětli mě to polopatě, moc bych to potřeboval funkční...chápu to správně že do souboru access.conf napíšu tohle ?
Petra
Profil
otec jiří: No já to taky moc nechápu :-) Takže - můj problém spočíval v tom, že všechny moje adresy se přepisovaly pomocí mod_rewrite z adres s proměnnýma (index.php?prom1=neco&prom2=cosi) na klasickou adresářovou strukturu (neco/cosi/). A to zhruba takto:

RewriteRule ^([a-zA-Z0-9-]*)$ /index.php?prom1=$1

RewriteRule ^([a-zA-Z0-9-]*)/$ /index.php?prom1=$1

První verze načetla správnou stránku pokud byla zadána bez lomítko, druhá, pokud byla s lomítkem. Samo se žádné lomítko nepřidalo, protože příslušný adresář neexistoval. Když dám místo toho druhého pravidla jen:

RewriteRule ^([a-zA-Z0-9-]+)$ /$1/ [R]

tak se to prostě přesměruje na verzi s lomítkem a tam se provede to první rewritovací pravidlo.

To vše nepíšu do access.conf, ale do .htaccess
otec jiří
Profil *
super..a ted jeste prosím kde ten soubor najdu, nebo kam ho mám dát ? a jak ho aktivovat ? díky
Petra
Profil
otec jiří: Soubor se přidává do dresáře, kde se to má provádět (tj. obvykle ten adresář, kde je nějaké to index.php). Takhle to funguje doma, na hostingu se to obvykle musí poslat mejlem a oni to přidají sami (anebo to tam nejde vůbec). Na začátek toho souboru se ještě musí napsat teda: RewriteEngine On

Když ti to nepřipisující se lomítko evidentně vzniklo bez mod_rewrite, tak jak to teda vzniklo? Žádný další případ kdyby to tohle dělalo neznám.
Yuhů
Profil
myslím, že už znám odpověď na původní dotaz. S mod_rewrite to asi vůbec nesouvisí. Dělá to mod_dir
halogan
Profil
Petra: Trochu bych vylepsil ten rewrite:
RewriteRule ^([a-z\-/]+[^/])$ /$1/ [R=301]
Petra
Profil
Jee, koukám, můj přes rok starý dotaz :-)

Yuhů: Původní dotaz souvisí s mod_rewrite do té míry, že kdybych měla normální adresáře a nesimulovala je, tak se to nestalo. Ale stejně ten mod_dir chápu jako něco, co přidává lomítko, když je to adresář, ne když je to soubor.

halogan: já snad ani radši nic vylepšovat nebudu, ještě by to přestalo fungovat :-)
Leo
Profil
"V tom případě doplní koncové lomítko na doména.cz/adresář/něco/"

Presneji posle presmerovani do prohlizece, a ten si pak vyzada adresu s lomitkem, takze to zdrzuje. Leo
halogan
Profil
Petra: puvodni rewrite nepocita s sub-adresarema.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0