Autor Zpráva
__martin
Profil *
Options -Indexes
RewriteEngine On
DirectorySlash Off
RewriteBase /

ErrorDocument 404 /404.php

# odstranuje koncova lomitka z url adresy. Z www.example.com/stranka/ na www.example.com/stranka
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} ^(.*)\/$
RewriteCond %1\.php -f
RewriteRule ^(.*)$ %1?%{REQUEST_URI} [R=301,NE,L]

# pokud uzivatel zada odkaz www.example.com/stranka nactese se soubor stranka.php
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]

# pokud uzivatel zada odkaz www.example.com/stranka.php bude presmerovan na www.example.com/stranka
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]


Ahoj,
snažím se z url odstranit koncová lomítka, v případě, že stránka bez lomítka bude existovat, tak se url přesměruje, tedy
www.example.com/kontakt/ se přesměruje na www.example.com/kontakt jen pokud se oveří, že soubor kontakt.php existuje. Bohužel mi uvedený příklad né úplně přesně funguje (chyba 404). Nevíte, kde by mohl být zádrhel?

Pokud dodatečně vytvořím složku "kontakt", tak se stránka přesměruje. Všiml jsem si této spojitosti, protože mám pár složek se stejným jménem jako php soubory. Díky moc
Davex
Profil
Jako první parametr volby RewriteCond nelze použít výstup z předchozích regulárních výrazů %1. Musí se to obejít uložením do proměnné nějak takto:
RewriteCond  %{REQUEST_FILENAME}  ^(.+)/?$
RewriteCond  %{REQUEST_FILENAME}  !-d
RewriteRule  .*  -  [E=MUJ_SOUBOR:%1]

# přesměrování na adresu bez lomítka na konci, pokud existuje soubor s příponou .php
RewriteCond  %{ENV:MUJ_SOUBOR}  !=""
RewriteCond  %{ENV:MUJ_SOUBOR}.php  -f
RewriteRule  ^(.+)/$  $1  [R=301,NE,L]
__martin
Profil *
Děkuji moc, je to cenná informace. Dnes vše vyzkouším a dám vědět, jak to funguje.
__martin
Profil *
RewriteCond  %{REQUEST_FILENAME}  ^(.+)/$
RewriteRule  .*  http://example.com/x=%{REQUEST_FILENAME} [R=301,NE,L]


Stránka example.com/kontakt/ neproleze regulárem a podle pravidla výše se nepřesměruje. Pokud odstraním lomítko na konci RewriteCond stránka se přesměruje na example.com/x=/var/www/example.com/subdomena/kontakt (lomitko na konci chybí). Proč uvedená stránka nevyhovuje reguláru?

Z toho stejného principu mi nefunguje příklad v předchozím příspěvku.

Díky
Davex
Profil
Ve skutečnosti do vyhodnocení REQUEST_FILENAME lomítko na konci nevstupuje, takže je potřeba změnit lomítko na volitelné (nebo ho neuvádět vůbec) a zjišťovat ho regulární výrazem u RewriteRule (opravil jsem i můj příklad [#2]).
RewriteCond  %{REQUEST_FILENAME}  ^(.+)/?$
RewriteRule  ^.+/$  http://example.com/x=%{REQUEST_FILENAME} [R=301,NE,L]
__martin
Profil *
RewriteCond  %{REQUEST_FILENAME}  ^(.+)/?$
RewriteRule  ^.+/$  http://example.com/x=%1 [R=301,NE,L]


mám soubory
/kontakt.php
složky
/kontakt/

když zadám Stránka example.com/kontakt/, tak se url přesměruje na example.com/x=/var/www/example.com/subdomena/kontakt/. Když smažu složku kontakt, tak se stránka přesměruje na example.com/x=/var/www/example.com/subdomena/kontakt. Tohle mě celkem mate. Jak přesměrovat url nezávisle na existenci složky na verzi bez konečného lomítka?
Davex
Profil
Možná je ještě problém s požíráním lomítka v prvním reguláru. Toto by mělo pomoci:
RewriteCond  %{REQUEST_FILENAME}  ^(.*[^/])/?$
RewriteRule  ^.+/$  http://example.com/x=%1 [R=301,NE,L]
__martin
Profil *
Díky moc, teď už to funguje přesně tak, jak má. Odstraňuje to lomítka z konce url, když někdo zadá stránku s příponou .php, tak se přípona "odstraní". Přikládám hotové řešení.
# odstranuje koncova lomitka z url adresy. Z www.example.com/stranka/ na www.example.com/stranka
RewriteCond %{REQUEST_URI}  ^(.+)/$
RewriteCond %{REQUEST_FILENAME} ^(.*[^/])/?$
RewriteRule .*  -  [E=MUJ_SOUBOR:%1]

RewriteCond %{ENV:MUJ_SOUBOR}  !=""
RewriteCond %{ENV:MUJ_SOUBOR}.php  -f
RewriteRule ^(.+)/$  $1  [R=301,NE,L]

# pokud uzivatel zada odkaz www.example.com/stranka nacte se se soubor stranka.php
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L]

# pokud uzivatel zada odkaz www.example.com/stranka.php bude presmerovan na www.example.com/stranka
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0