.htaccess a presmerovanie bez / na konci
Zdravim
potrebujem pomocou .htaccess presmerovat stranku z domeny index.html na adresar ale aby na konci nebolo /
v .htaccess mam toto, ale tam mi to lomitko da vzdy:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.*)index\.html($|\ |\?)
RewriteRule ^ /%1 [R=301,L]
neviete niekto v com moze byt este chyba
dakujem
Ivan
Používejte tag Code při vkládání zdrojových kódů do příspěvku.
ahoj Kurt
dakujem za odpoved, zmenil som to tak ako si napisal na :
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ (.*)index\.html($|\ |\?)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
ale stale mi tam ostava to / a teraz uz dokonca aj pripona index.html
dal som to tam spravne?
Dakujem
Ivan
Ale vždyť je to úplně něco jiného, než jsem psal já. Vyhoďte ty vaše řádky (stačí je zakomentovat) a zkuste jen to, co jsem napsal já.
jasne, takze som tam nechal iba
RewriteRule ^(.*)/$ /$1 [L,R=301]
ale ked zadam nieco tak mi pise ze : Stránku sa nepodarilo správne presmerovať
nemoze to byt este aj nieco s tym ze mam presmerovanu domenu bez www na www:
přidány code tagy, zjevně to je nad síly tazatele.. (touchwood)
odstránené tagy URL z code (los)
ale ked ju zadam index.html tak mi ju zobrazi
Zdravim Kurt
skusal som to horom dolom, ale stale mi to bud nefunguje, laebo ked to tam dam ako ste mi poslali tak mi to vypisuje : Stránku sa nepodarilo správne presmerovať
a nechal som tam teda iba : RewriteRule ^(.*)/$ /$1 [L,R=301]
Dakujme
ivan
HTTP odpovede so stavom 301 (Moved Permanently) sa v prehliadačoch kešujú, takže sa ti ľahko môže stať, že prvýkrát to nastaviš a pri ďalších úpravách sa ti zdá, že sa zmeny neaplikujú. Vtedy treba vymazať keš (napr. cez Ctrl+Shift+Delete a zvoliť súbory vo vyrovnávacej pamäti).
Takže zmaž zakešované súbory/HTTP odpovede a skús znovu. Prípadne pre testovanie si tam daj zatiaľ 302 (Found).
ahoj Los
spravil som to tak ale nefunguje
podarilo sa nejako rozchodit ze mi stranku zobrazi aj bez lomitka, ale stale mi nechce spravit presmerovanie ked je na konci adresara lomitko resp /index.html
takto to mam:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.html($|\ |\?)
DirectorySlash Off
#removing trailing slash
RewriteCond %{THE_REQUEST_FILENAME} \ /(.*)/(\ |$|\?)
RewriteRule ^(.*)/$ $1 [R=301,L]
# internally add the slash back
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ /$1/ [L]
lomítko na konci je správne
Tak jinak.
Tohle by mělo z adresy odstranit index.html:
Vložte prosím pouze toto pravidlo do souboru .htaccess (nekombinujte je s jiným)
funguje?
bohuzial nie, stale mi to odstrani iba index.html ale lomitko na koci mi to necha
Ano, to je správně. V tom případě ještě do souboru .htaccess přidejte to, co jsem radil včera, tedy:
Vysvětlím - první pravidlo, jak píšete, odstraňuje "index.html", druhé pravidlo potom ono nechtěné lomítko = společně by tato dvě pravidla měla dělat to, co požadujete, tedy namísto index.html bude adresar
teraz to sice spravi ale stranku mi nezobrazi a vypise mi :
Forbidden
You do not have permission to access this document.
Web Server at www.nieco.sk
Takto to tam mam komletne:
ErrorDocument 404 "www.nieco.sk"
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
RewriteCond %{HTTP_HOST} ^xx\.xx\.xx\.xx
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^nieco\.sk
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} nieco\.sk/
RewriteRule (.*) www.nieco.sk [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.html($|\ |\?)
RewriteRule ^ /%1 [R=301,L]
RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]
oprava mam tam iba toto:
ErrorDocument 404 "www.nieco.sk"
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
RewriteCond %{HTTP_HOST} ^xx\.xx\.xx\.xx
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^nieco\.sk
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} nieco\.sk/
RewriteRule (.*) www.nieco.sk [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]
Základ je rozumieť tomu, čo robíš. Na to slúži dokumentácia k mod_rewrite pre posledný Apache, prípadne pre staršiu verziu. Akú máš vlastne verziu (v tomto prípade to je asi jedno, ale je lepšie pozerať sa na dokumentáciu k tomu, čo máš)? To zistíš buď v hlavičkách odpovede tvojho servera alebo keď spustíš Apache s parametrom -v.
Ja v tej dokumentácii napr. čítam, že RewriteCond sa vzťahuje na nasledujúci RewriteRule, preto mi nie je jasné, prečo máš RewriteCond nad DirectorySlash Off.
DirectorySlash Off hovorí, že mod_dir nemá dopĺňať lomítko na koniec v prípade, že ide o adresár. Toto vyzerá ok.
Ďalší riadok máš RewriteCond, v ktorom je premenná THE_REQUEST_FILENAME. V dokumentácii vidím, že existuje REQUEST_FILENAME a THE_REQUEST_FILENAME tam nikde nevidím. Takže to bude asi preklep. V tejto podmienke kontroluješ, či názov súboru obsahuje medzeru + lomítko + hocijaký reťazec + ďalšie lomítko nasledované medzerou, koncom reťazca alebo otáznikom. Neviem, či je to to, čo chceš - ja som to prestal čítať už pri prvej medzere, pretože sa mi nezdá, že by si chcel obmedzovať názov súboru na taký, ktorý obsahuje medzeru.
Ak je predchádzajúca podmienka splnená, presmeruješ dopyty, ktoré končia lomítkom na také, ktoré lomítkom nekončia. Použil si flag R=301 a L, takže to bude s permanentným presmerovaním a je to posledné pravidlo, ktoré sa berie do úvahy. Toto vyzerá na prvý pohľad ok už aj kvôli tomu, že sa to nápadne podobá na to, čo ti písal Kurt. Chýba mi tam jedno lomítko pred $1, ja by som ho tam dal.
Ďalší blok hovorí o tom, že keď je to adresár (prvý RewriteCond) a URL nekončí lomítkom (druhý RewriteCond), tak ho interne presmeruj na URL s lomítkom. Ak používaš Indexes alebo možno v nejakých iných špeciálnych prípadoch to má zmysel, inak je to zbytočnosť, ale budiž.
Pri písaní/testovaní rewrite pravidiel si daj do konfigurácie len jedno pravidlo a testuj len to (tak ako píše Kurt nižšie). A použi 302 namiesto 301, aby si sa nepopálil na tom, že sa to kešuje. Keď ti to bude fungovať, môžeš to zmeniť na 301. Ja by som tam asi tú 302 nechal aj po dopísaní pravidiel, pretože by som nechcel, aby mali používatelia nakešované niečo, čo sa potom ťažšie mení.
zdravim Los
dakujem za odpoved a vazim si to co si mi napisal, len ja bohuzial neviem velmi pracovat s appache a .htaccess preto som potreboval pomoct.
Skusal som to ako mi napisal kurt ale stale mi tam necha lomitko na koci, ukazem to este najednom priklade, potom prosim tieto odkazy mozete zmazat.
Napr. roulette sa automaticky zmeni na roulette
a toto sa snim nejako spravit.
Dakujem
Ivan
je to redirect, a podla hlavicky odpovede je aplikacny, z php
mod_rewrite je tam mozno pouzity na skryvanie .php koncoviek
ano, len ja to potrebujem spravit na html, uz mi to celkom aj funguje podla toho co mi napisal Kurt ale teraz to sice prelinkuje ale stranku nezobrazi iba vypise :
Forbidden
You do not have permission to access this document.
a mam tam toto:
ErrorDocument 404 "www.nieco.sk"
RewriteEngine On
DirectorySlash Off
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* ? [F,L]
RewriteCond %{HTTP_HOST} ^xx\.xx\.xx\.xx
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^nieco\.sk
RewriteRule (.*) www.nieco.sk$1 [R=301,L]
RewriteCond %{HTTP_HOST} nieco\.sk/
RewriteRule (.*) www.nieco.sk [R=301,L]
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]
# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]
inak, ja vlastne netuším čo chceš dosiahnuť..
raz prepisuješ index.html na adresu s lomítkom, či bez neho
druhý raz zase meníš index.html na lomítko
je ti vôbec jasné čo sa tam deje? čo je rewrite, čo je redirect.. aspoň niečo takéto si prečítaj mod-rewrite.html
ja sa snazim z adresy index.html spravit adresar
to je vsetko co by som potreboval
mam este taketo riesenie ktore funguje, ale nevedeli by ste mi poradit ako to aplikovat na vsetky adresare a podadresare nie len test?
RewriteRule ^test$ /test/index.html [L,E=LOOP:1]
RewriteCond %{ENV:REDIRECT_LOOP} !1
RewriteRule ^test/$ /test [R=301,L]
RewriteCond %{ENV:REDIRECT_LOOP} !1
RewriteRule ^test/index.html$ /test [R=301,L]
Už ti to tady psali dříve. Tys nikdy neviděl při odpovědích tohle, kodére?
jasne pardon, ale hodila by sa skorej odpoved