Autor | Zpráva | ||
---|---|---|---|
fujrer Profil * |
#1 · Zasláno: 19. 4. 2013, 20:47:08
Používám pro přesměrování domena.cz >
www.domena.cz/ tento htaccess:
RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [R=301,QSA] RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule ^(.+[^/])$ $1/ [R=301,QSA,L] Teď jsem u jednoho webu navíc přidal pro zbavení se nutnosti používat koncovky (.php) toto RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php Ale když kliknu na odkaz, vygeneruje se takováto url (stránka nenalezena): http://www.domena.cz/mnt/data/accounts/m/mujucet/data/www/domena/page.php/
Jak to zařídit, aby obě funkce (zbavení se přípony a přesměrování na domena.cz/) dohromady fungovaly? |
||
Kajman Profil |
Zkuste mezi řádek 5 a 6 dát ještě podmínku, že již nebylo tajně přepsáno
RewriteCond %{ENV:REDIRECT_STATUS} ="" A nové pravidlo by mělo být za těmi přesměrováními a je lepší tam dát flag [L] Ten flag přidejte i na řádku 2. |
||
fujrer Profil * |
#3 · Zasláno: 20. 4. 2013, 00:45:34
Děkuji. Bohužel je to pořád stejné.
Zkusil jsem: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [R=301,QSA] RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteCond %{REQUEST_URI} !/$ RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule ^(.+[^/])$ $1/ [R=301,QSA,L] a RewriteEngine on RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [R=301,QSA] RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteCond %{REQUEST_URI} !/$ RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule ^(.+[^/])$ $1/ [R=301,QSA,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php Ale nevím co je flag [L], htaccess je pro mě španělská vesnice... |
||
Davex Profil |
#4 · Zasláno: 20. 4. 2013, 12:47:47
Druhá varianta je správnější - všechna přesměrování by měla být před přepisem.
1) V přesměrování není dobré používat relativní cíl přesměrování. V druhém přesměrování použij absolutní nebo kořenovou adresu. RewriteRule ^(.+[^/])$ /$1/ [R=301,QSA,L] 2) V pravidle pro odstranění přípony bude pravděpodobně vadit lomítko na konci adresy a mělo by se nechat požrat, aby se nepřepisovalo na /page/.php
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)/$ $1.php [L] |
||
fujrer Profil * |
#5 · Zasláno: 21. 4. 2013, 12:21:44
tohle "téměř" funguje, ale přidává to lomítko na konec
www.domena.cz/page/ - zobrazí se stránka bez obrázků a bez stylů:
RewriteEngine on RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [R=301,QSA] RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteCond %{REQUEST_URI} !/$ RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteRule ^(.+[^/])$ /$1/ [R=301,QSA,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)/$ $1.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" - přítomnost/nepřítomnost tohoto řádku nemá žádný vliv. když použiju čistě jen tenhle vylepšený kód, tak to hází 404: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)/$ $1.php [L] |
||
Davex Profil |
#6 · Zasláno: 21. 4. 2013, 13:02:03
fujrer:
„tohle "téměř" funguje, ale přidává to lomítko na konec w>ww.domena.cz/page/“ Pokud se nemá přidávat, tak to zcela mění situaci a mělo to být známo hned na začátku. „zobrazí se stránka bez obrázků a bez stylů:“ Pro připojení obrázků a stylů je třeba použít kořenové adresy. „když použiju čistě jen tenhle vylepšený kód, tak to hází 404:“ To by se asi nemělo v regulárním výrazu vyžadovat lomítko na konci, když tam nemá být a není tam druhé přesměrování, které ho přidává. RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php [L] |
||
fujrer Profil * |
#7 · Zasláno: 21. 4. 2013, 15:09:13
Bohužel nefunguje. Kdo by za přiměřenou úplatu chtěl přímo na serveru vytvořit a odzkoušet htaccess s požadovanými vlastnostmi, napište prosím na extrapes@seznam.cz.
|
||
Davex Profil |
#8 · Zasláno: 21. 4. 2013, 15:18:05
Pokud nepotřebuješ to lomítko, tak to zkus podle Řešení některých častějších problémů (FAQ) » Stránky s adresou bez koncovky.
|
||
fujrer Profil * |
#9 · Zasláno: 21. 4. 2013, 16:20:45
toto hází 404:
RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.+)\.php$ http://%{HTTP_HOST}/$1 [L,R=301,NE] |
||
Davex Profil |
#10 · Zasláno: 21. 4. 2013, 16:24:36
fujrer:
To je jen přesměrování na variantu bez přípony. Potřebuješ to, co jsi přeskočil. # podstrčení PHP, přepsat pouze na existující skript RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [L] |
||
fujrer Profil * |
#11 · Zasláno: 21. 4. 2013, 17:20:31
tak tohle samo o sobě pro "bezpřínovování" funguje:
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.+)\.php$ http://%{HTTP_HOST}/$1 [L,R=301,NE] ale když to přidám k tomu svému zbytku, tak se nakonec URL začne přidávat lomítko a skončí to 404kou: RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [R=301,QSA] RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$ RewriteCond %{REQUEST_URI} !/$ RewriteRule ^(.+[^/])$ $1/ [R=301,QSA,L] RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.+)\.php$ http://%{HTTP_HOST}/$1 [L,R=301,NE] |
||
Davex Profil |
#12 · Zasláno: 21. 4. 2013, 17:58:11
A co by to mělo přesně dělat?
1. pravidlo přesměrovává na doménu s www 2. pravidlo přesměrovává na variantu s lomítkem 3. pravidlo podstrkává adrese bez přípony skript s příponou .php 4. pravidlo přesměrovává adresu s příponou .php na variantu bez přípony Pokud se nemá přidávat lomítko za adresu, tak tam nemůže být 2. pravidlo, protože zároveň nemohou být splněny dva protichůdné požadavky (přidávat a nepřidávat lomítko). |
||
fujrer Profil * |
#13 · Zasláno: 21. 4. 2013, 18:12:55
Potřebuji, aby to dávalo lomítko za .cz, aby všechny možné varianty (domena.cz, domena.cz/,
www.domena.cz ) končily jedním totožným url www.domena.cz/
|
||
Davex Profil |
fujrer:
Za doménou je lomítko vždy samo od sebe a není potřeba ho přidávat. (A to 2. pravidlo ho tam ani nepřidává. Pravidlem mám na mysli celé RewriteRule se všemi příslušejícími podmínkami RewriteCond )
|
||
fujrer Profil * |
#15 · Zasláno: 21. 4. 2013, 19:14:20
Děkuji, asi to nevyřešíme, nechám to někomu udělat.
|
||
Davex Profil |
#16 · Zasláno: 21. 4. 2013, 19:32:25
fujrer:
„Děkuji, asi to nevyřešíme“ Myslím, že řešení je snadné. Stačí jen vynechat druhé pravidlo (případně přidat původní podmínku pro adresář a přidat příznaky [L,NE] u prvního přesměrování) a mělo by to fungovat. Nebo je ještě v něčem problém?
RewriteEngine on RewriteBase / RewriteCond %{HTTP_HOST} ^domena.cz RewriteRule ^(.*)$ http://www.domena.cz/$1 [L,NE,R=301,QSA] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ $1.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{REQUEST_METHOD} =GET RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.+)\.php$ http://%{HTTP_HOST}/$1 [L,R=301,NE] |
||
fujrer Profil * |
#17 · Zasláno: 21. 4. 2013, 20:03:10
No jo, funguje to.
Já věděl, že tě donutím mi to napsat! Ne, opravdu děkuji veleuctivě, že jsi strávil půl neděle řešením mého problému. Já už bych se dávno poslal... Díky. |
||
Časová prodleva: 11 let
|
0