Autor | Zpráva | ||
---|---|---|---|
TomasRe Profil |
Ahoj,
můžete mi prosím někdo poradit, co dělám špatně ohledně nastavení přátelské URL? Zkoušel jsem spousty návodů a nikdy se mi to bohužel nepodařilo. Obsah .htaccess (důležité jsou poslední dva řádky): RewriteEngine On RewriteBase / # odstraní koncovku php RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP RewriteRule (.*)\.php$ $1 [R=301] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] RewriteRule ^lokalita/([^/]+)$ /lokalita.php?misto=$1 [L] RewriteRule ^([^/]+)$ /novinka.php?id=$1 [L] Pak by tedy místo odkazu na stránky /lokalita?misto=XXX byl /lokalita/XXX /novinka?id=XXX byl /XXX Bohužel v obou případech se zobrazí chyba 404. Za jakékoliv rady budu moc rád. Díky... |
||
Kajman Profil |
Díky pravidlu na řádku 9 se to přepíše na
lokalita/XXX.php ten neexistuje, proto 404. Je možné např. omezit pravidlo na řádku 9 tak, že nechcete převádět adresy s lomítkem RewriteRule ^([^\./]+)$ $1.php [NC,L] Nebo dáte nová pravidla před řádek 4. Edit: ale pravidla z řádku 12 a 9 nelze používat souběžně. To, co bude dřív, to sežere a druhé podstrčení už nebude funkční. |
||
TomasRe Profil |
#3 · Zasláno: 27. 3. 2018, 10:06:14
Kajman:
Děkuju moc za info... Ještě prosím doplňující dotaz... Když tedy nepoužiju pravidlo pro odstranění koncovky a htaccess bude vypadat následovně: RewriteEngine On RewriteBase / # odstraní index.php RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?) RewriteRule ^ /%1 [R=301,L] RewriteRule ^lokalita/([^/]+)$ /lokalita.php?misto=$1 [L] Proč při zavolání URL lokalita/XXX (místo lokalita.php?misto=XXX) stále odkazuje na 404? |
||
Kajman Profil |
#4 · Zasláno: 27. 3. 2018, 10:25:22
Pomůže odstranit lomítko před lokalita.php? Soubor lokalita.php existuje?
|
||
TomasRe Profil |
#5 · Zasláno: 27. 3. 2018, 10:39:07
Kajman:
RewriteRule ^lokalita/([^/]+)$ lokalita.php?misto=$1 [L] |
||
Kajman Profil |
V error logu apache je něco bližšího?
Na testovacím stroji je možné zapnout rewritelog pro ladění - způsob se liší dle verze apache (2.4 a 2.2) httpd.apache.org/docs/current/mod/mod_rewrite.html#logging httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewritelog Edit: ještě mě napadají dva důvody: - .htaccess není povolený - Řešení některých častějších problémů (FAQ) » Kterak ověřit, zda je rewrite povoleno a zapnuto - existuje adresář lokalita, ve kterém je .htaccess, který přepíše rewrite pravidla z .htaccess v rootovském adresáři |
||
TomasRe Profil |
Kajman:
Tak v logu není vůbec nic... K těm dvou důvodům (snad se nepletu) - pokud by nebyl htaccess povolený, tak by původně ani nemazal příponu .php - v celé struktuře jiný .htaccess není |
||
Kajman Profil |
#8 · Zasláno: 29. 3. 2018, 13:20:20
Pokud v rewritelogu nic není, tak ta pravidla v .htaccess se asi vůbec neprochází. Ale to by neměl jít ani to ověření, zda je povolený z [#6].
Na testovacím stroji ještě můžete zkusit vypsat phpinfo a mrknout se v něm na cesty, zda vůbec a případně na co se to přepsalo .htaccess ErrorDocument 404 /phpinfo.php phpinfo.php <?php phpinfo(); |
||
Časová prodleva: 5 dní
|
|||
TomasRe Profil |
#9 · Zasláno: 3. 4. 2018, 10:50:09
Kajman:
v PHP infor jsou všechny URL podle zadání htaccess v pořádku tedy lokalita/XXX _SERVER["REDIRECT_URL"] _SERVER["REQUEST_URI"] _ENV["REDIRECT_URL"] _ENV["REQUEST_URI"] |
||
Kajman Profil |
#10 · Zasláno: 3. 4. 2018, 12:17:54
Tak to právě v pořádku není. Pokud by zafungovalo dobře přepsání před rewriterule, bylo by v REDIRECT_URL lokalita.php.
|
||
TomasRe Profil |
#11 · Zasláno: 4. 4. 2018, 12:41:54
Kajman:
Rozumím. Nějaký nápad proč to tak je? Každopádně moc děkuji. |
||
Kajman Profil |
#12 · Zasláno: 4. 4. 2018, 13:41:11
A už jste si konečně zkusil ověřit funkčnost mod_rewrite v tom .htaccess?
Řešení některých častějších problémů (FAQ) » Kterak ověřit, zda je rewrite povoleno a zapnuto To že se předtím podstrkávaly jiné adresy neznamená, že to bylo nutně právě díky tomu .htaccess, který se snažíte upravit. Pokud si funkčnost ověříte, dejte sem celý obsah .htaccess. Je možné, že se to tluče s něčím dalším. |
||
TomasRe Profil |
#13 · Zasláno: 4. 4. 2018, 13:59:45
Kajman:
Pro vyzkoušení funkčnosti jsem tedy zadal do .htaccess pouze toto RewriteEngine On RewriteRule .* http://www.jakpsatweb.cz/ [L] a přesměrovalo mě to... Nyní je obsah .htaccess: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^lokalita/([^/]+)$ lokalita.php?misto=$1 [L] Zatím na webu nic neměním (odkazy) - a zkouším to ručně přepsat tedy z URL /lokality/lokalita.php?misto=lom-borena-hora na /lokality/lokalita/lom-borena-hora - jen jestli ještě nemůžu dělat nějakou chybu já... Jinak v adresáři /lokality existují soubory index.php a lokalita.php |
||
Kajman Profil |
#14 · Zasláno: 4. 4. 2018, 14:28:48
Co ta cesta /lokality/ ? O té jste se nikdy nezmínil. Pokud je .htaccess v rootu webu, pak má být pravidlo
RewriteRule ^lokality/lokalita/([^/]+)$ lokality/lokalita.php?misto=$1 [L] Pokud je .htaccess z [#13] v adresáři lokality, tak opravte RewriteBase /lokality/ |
||
TomasRe Profil |
Kajman:
To jsem si nějak neuvědomil, že je to tak důležitý. Moc děkuju už to funguje. Jen se to nenačetlo se styly, ale počítám, že to je cestou, protože je tam o lomítko navíc :-). Ještě jednou strašně moc děkuji... Kajman: Ještě technický dotaz prosím - jak by to vypadalo, když by v URL bylo více proměnných? Něco ve smyslu lokality/lokalita.php?misto=XXXXX&neco=YYYYYY |
||
Kajman Profil |
#16 · Zasláno: 4. 4. 2018, 15:58:31
Jak se dá rozlišit, která část z url je první proměnná a která druhá?
|
||
Keeehi Profil |
#17 · Zasláno: 4. 4. 2018, 17:02:59
RewriteRule ^lokality/lokalita/([^/]+)/([^/]+)$ lokality/lokalita.php?misto=$1&neco=$2 [L] |
||
TomasRe Profil |
Kajman:
To je čistě teoreticky. Takže např. takto: lokality/lokalita.php?prvni=XXXXX&druha=YYYYYY Keeehi: A výsledná URL bude tedy lokality/lokalita/XXXYYYY nebo lokality/lokalita/XXXX/YYYY ? |
||
Kajman Profil |
#19 · Zasláno: 5. 4. 2018, 07:59:53
Výslednou URL si právě musíte navrhnout Vy a to tak, aby se daly jednotlivé parametry rozlišit (regulárním výrazem).
Keeehiho verze bude přepisovat URL ve tvaru lokality/lokalita/XXXX/YYYY
Také se dají nechat některé parametry v query stringu, pro zachování je však nutný flag QSA takže by se jen upravilo současné prvidlo RewriteRule ^lokality/lokalita/([^/]+)$ lokality/lokalita.php?misto=$1 [L,QSA] lokality/lokalita/XXX?neco=YYYY
Jsou i další možné url, jen si musíte vymyslet, kterou chcete používat a pak teprve podle toho psát pravidlo na přepis. |
||
TomasRe Profil |
#20 · Zasláno: 5. 4. 2018, 08:43:18
Kajman:
Rozumím. Opravdu moc děkuji za pomoc... |
||
TomasRe Profil |
Kajman:
Moc se omlouvám, ale prosím ještě o radu... Myslel jsem, že jsem pochopil ty dva atributy, ale očividně ne. Jak by prosím vypadalo přesměrování z URL /lokality/lokalita.php?misto=XXX&id=YY aby výsledná URL byla /lokality/misto-id ? Už jsem na to přišel - všechno jste mi tu vlastně napsali... Ještě jednou moc díky oběma Kajman a Keeehi |
||
Keeehi Profil |
Je dobré hlavně změnit oddělovač
RewriteRule ^lokality/lokalita/([^-]+)-([^/]+)$ lokality/lokalita.php?misto=$1&neco=$2 [L] |
||
Kajman Profil |
#23 · Zasláno: 5. 4. 2018, 15:20:12
Pokud má být na konci číslo, tak spíše
RewriteRule ^lokality/(.+)-([0-9]+)$ lokality/lokalita.php?misto=$1&id=$2 [L,QSA] |
||
TomasRe Profil |
#24 · Zasláno: 7. 4. 2018, 12:22:18
Kajman:
Můžu se ještě zeptat...? Tento příklad nefunguje, když $1 je ve tvaru aaa-bbb (obsahuje více slov s pomlčkou), URL je pak aaa-bbb-123. Dá se to nějak ošetřit? Proměnná $1 může obsahovat jedno slovo, ale stejně tak i 5 slov... Případně ještě druhý dotaz - pokud bych tedy zvolil výsledný tvar URL $1/$2 - přibude mi "cesta" - nevím jak to popsat - tváří se, jako by byl soubor v dalším podadresáři a tedy nevidí obrázky, styly a pod... Dá se to nějak jednoduše ošetřit, nebo musím všude přepsat cestu ../ na / ? |
||
Kajman Profil |
#25 · Zasláno: 7. 4. 2018, 13:31:29
TomasRe:
„Tento příklad nefunguje, když $1 je ve tvaru aaa-bbb (obsahuje více slov s pomlčkou), URL je pak aaa-bbb-123.“ Mně přijde, že to funguje. htaccess.madewithlove.be?share=e3cfe010-d0a8-5c0b-8ba2-bd18b66340fe |
||
Keeehi Profil |
#26 · Zasláno: 7. 4. 2018, 16:46:21
TomasRe:
„Dá se to nějak jednoduše ošetřit, nebo musím všude přepsat cestu ../ na / ?“ Tak teoreticky můžeš použít jiný oddělovač než lomítko. Třeba podtržítko aaa-bbb_123 . Mít ale zapsanou cestu od kořene je ale lepší nápad. Nebudeš pak muset nikdy řešit, co právě v url je.
|
||
TomasRe Profil |
#27 · Zasláno: 7. 4. 2018, 18:31:51
Kajman, Keeehi:
Super. Teď už se s tím snad nějak poperu... Každopádně oboum strašně moc děkuji. Tohle je pro mě něco naprosto nového a bez vás bych to nedal dohromady. Ještě jednou opravdu moc díky. |
||
Časová prodleva: 5 let
|
0