Předmět Autor Datum
# remove trailing slash RewriteRule ^(.*)/$ /$1 [L,R=301] Používejte tag Code při vkládání zdrojov…
Kurt 05.12.2016 16:46
Kurt
ahoj Kurt dakujem za odpoved, zmenil som to tak ako si napisal na : RewriteCond %{THE_REQUEST} ^[A-…
dirko 05.12.2016 16:52
dirko
Ale vždyť je to úplně něco jiného, než jsem psal já. Vyhoďte ty vaše řádky (stačí je zakomentovat) a…
Kurt 05.12.2016 16:54
Kurt
jasne, takze som tam nechal iba RewriteRule ^(.*)/$ /$1 [L,R=301] ale ked zadam nieco tak mi pise…
dirko 05.12.2016 17:03
dirko
ale ked ju zadam index.html tak mi ju zobrazi
dirko 05.12.2016 17:05
dirko
Zdravim Kurt skusal som to horom dolom, ale stale mi to bud nefunguje, laebo ked to tam dam ako ste…
dirko 05.12.2016 19:22
dirko
HTTP odpovede so stavom 301 (Moved Permanently) sa v prehliadačoch kešujú, takže sa ti ľahko môže st…
los 06.12.2016 07:43
los
ahoj Los spravil som to tak ale nefunguje :-( podarilo sa nejako rozchodit ze mi stranku zobrazi aj…
dirko 06.12.2016 11:17
dirko
lomítko na konci je správne
čitateľ 06.12.2016 12:32
čitateľ
Tak jinak. Tohle by mělo z adresy odstranit index.html: RewriteEngine On RewriteRule ^index\.html$…
Kurt 06.12.2016 12:47
Kurt
bohuzial nie, stale mi to odstrani iba index.html ale lomitko na koci mi to necha
dirko 06.12.2016 13:32
dirko
Ano, to je správně. V tom případě ještě do souboru .htaccess přidejte to, co jsem radil včera, tedy:…
Kurt 06.12.2016 13:42
Kurt
teraz to sice spravi ale stranku mi nezobrazi a vypise mi : Forbidden You do not have permission to…
dirko 06.12.2016 13:48
dirko
oprava mam tam iba toto: ErrorDocument 404 "www.nieco.sk" RewriteEngine On DirectorySlash Off Re…
dirko 06.12.2016 13:52
dirko
Základ je rozumieť tomu, čo robíš. Na to slúži dokumentácia k mod_rewrite pre posledný Apache, prípa…
los 06.12.2016 13:19
los
zdravim Los dakujem za odpoved a vazim si to co si mi napisal, len ja bohuzial neviem velmi pracovat…
dirko 06.12.2016 13:39
dirko
je to redirect, a podla hlavicky odpovede je aplikacny, z php mod_rewrite je tam mozno pouzity na s…
čitateľ 06.12.2016 13:56
čitateľ
ano, len ja to potrebujem spravit na html, uz mi to celkom aj funguje podla toho co mi napisal Kurt…
dirko 06.12.2016 13:59
dirko
inak, ja vlastne netuším čo chceš dosiahnuť.. raz prepisuješ index.html na adresu s lomítkom, či be…
čitateľ 06.12.2016 14:14
čitateľ
ja sa snazim z adresy index.html spravit adresar to je vsetko co by som potreboval
dirko 06.12.2016 14:16
dirko
mam este taketo riesenie ktore funguje, ale nevedeli by ste mi poradit ako to aplikovat na vsetky ad…
dirko 06.12.2016 16:23
dirko
Už ti to tady psali dříve. Tys nikdy neviděl při odpovědích tohle, kodére? [27537-code-png]
IQ37 06.12.2016 17:44
IQ37
jasne pardon, ale hodila by sa skorej odpoved :-) poslední
dirko 06.12.2016 20:15
dirko

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

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:

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 %{HTTP_HOST} !^www.nieco.sk$ [NC] 
RewriteRule .? www.nieco.sk%{REQUEST_URI} [R=301,L]

přidány code tagy, zjevně to je nad síly tazatele.. (touchwood)
odstránené tagy URL z code (los)

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]

Tak jinak.
Tohle by mělo z adresy odstranit index.html:

RewriteEngine On
RewriteRule ^index\.html$ / [R=301,L]
RewriteRule ^(.*)/index\.html$ /$1/ [R=301,L]

Vložte prosím pouze toto pravidlo do souboru .htaccess (nekombinujte je s jiným)

funguje?

Ano, to je správně. V tom případě ještě do souboru .htaccess přidejte to, co jsem radil včera, tedy:

# remove trailing slash
RewriteRule ^(.*)/$ /$1 [L,R=301]

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

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]

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]

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