Autor | Zpráva | ||
---|---|---|---|
__martin Profil * |
#1 · Zasláno: 31. 5. 2010, 02:35:27
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 |
#2 · Zasláno: 31. 5. 2010, 23:15:40 · Upravil/a: Davex
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 * |
#3 · Zasláno: 2. 6. 2010, 15:22:35
Děkuji moc, je to cenná informace. Dnes vše vyzkouším a dám vědět, jak to funguje.
|
||
__martin Profil * |
#4 · Zasláno: 2. 6. 2010, 17:03:25
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 |
#5 · Zasláno: 2. 6. 2010, 20:46:50
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 * |
#6 · Zasláno: 3. 6. 2010, 13:45:50
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 |
#7 · Zasláno: 3. 6. 2010, 17:59:01
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 * |
#8 · Zasláno: 3. 6. 2010, 22:32:45
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] |
||
Časová prodleva: 14 let
|
0