Autor | Zpráva | ||
---|---|---|---|
Milan1236000 Profil |
Zdravím,
mám jen malý technický dotaz. Je jedno v jakém kódování je soubor .htaccess ?
Ještě když už jsem u toho, tak se chci zeptat, proč mi nefunguje RewriteRule .
V .htaccess mám zatím tohle:
# Chybové stránky ErrorDocument 404 "http://localhost/projekt/chyba404.php" ErrorDocument 403 "http://localhost/projekt/chyba403.php" #--- potud to funguje # tohle tam je jen na zkoušku a taky funguje ↓ RewriteEngine On RewriteRule (.*) http://www.jakpsatweb.cz [R] # po zakomentování dvou předchozích řádků a odkomentování zbytku ("nezobrazování přípony .php") až do konce, se přípona pořád v URL zobrazuje #RewriteEngine On #RewriteBase / #RewriteCond %{REQUEST_FILENAME} !-f #RewriteCond %{REQUEST_FILENAME} !-d #RewriteRule ^(.*)/$ $1.php [L] |
||
Davex Profil |
#2 · Zasláno: 31. 10. 2015, 11:25:52
Milan1236000:
„Je jedno v jakém kódování je soubor .htaccess ?“
Pokud to bude něco založené na ASCII, tak je to skoro jedno (nefungoval by třeba soubor v UTF-8 uložený s BOM, kde vadí ten BOM). „se přípona pořád v URL zobrazuje“ Protože to pravidlo příponu z URL neodstraňuje, ale přepisuje URL s lomítkem na konci na soubor.php. |
||
Milan1236000 Profil |
#3 · Zasláno: 31. 10. 2015, 14:39:16
Davex:
Aha, takže potom by tedy konec mohl být takhle: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$\.php /$1 [L] Díky. |
||
Keeehi Profil |
První je z čeho (tam přece PHP mít nechceš) a druhý parametr je na co se to má převést (a tam tu koncovku chceš neboť to je reálný soubor)
RewriteRule ^(.*)/$ /$1.php [L] |
||
juriad Profil |
#5 · Zasláno: 31. 10. 2015, 14:55:41
Milan1236000:
RewriteRule ^(.*)\.php$ /$1 [R=301, L] Říká to "začátek, zapamatovat cokoli, tečka php, konec" připiš na tu zapamatovanou část. Keeehi: Zdá se mi, že chce něco jiného. Milan1236000: Jak má vypadat odkaz na tvou stránku? (/prase.html) Co se má zobrazit v URL? (/prase) Jaký skript se má zavolat? (/prase.php) Tyto tři otázky určí, jaké pravidlo vlastně potřebuješ. V závorkách je jen uvedený nějaký nesouvisející příklad. |
||
Milan1236000 Profil |
Keeehi, juriad:
U RewriteRule ^(.*)\.php$ /$1 [R=301, L] Zkoušel jsem různé kombinace, které jsem našel na internetu, ale ani jedna mi nefunguje, i když k tomu přidám Options +FollowSymlinks .
Nechápu, co kde je špatně. Už asi 2 dny to různě zkouším, ale furt nic. juriad: Je to tak, jak píšeš. Mám soubor /index.php , ale v URL chci zobrazit jen /index
|
||
Davex Profil |
#7 · Zasláno: 31. 10. 2015, 19:54:53
Milan1236000:
Proč to neuděláš takto? |
||
Milan1236000 Profil |
#8 · Zasláno: 31. 10. 2015, 23:02:09
Davex:
Ano, i to jsem už zkoušel. Nic nefunguje, nevím, jak je to možné. Té přípony se prostě nemůžu zbavit. |
||
Keeehi Profil |
#9 · Zasláno: 1. 11. 2015, 00:29:21
A zkoušíš ji tam nepsat, že? => když napíšeš adresu na konci bez .php, tak se nic nezobrazí. Pokud ano, pak máš opravdu někde chybu.
Pokud se to zobrazí správně a jen v případě, že zadáš adresu s .php na konci se neprovede přesměrování, pak ke vše v pořádku, protože o tom ten kód vůbec není. |
||
Milan1236000 Profil |
Keeehi:
Zkoušel jsem s příponou i bez ní, ale stránka se zobrazí pouze s ní. Ještě to zkusím na jiný server, jestli to schválně půjde tam, když u mě to na WampServeru nejde. -- Tak jsem zkoušel EasyPHP a XAMPP a taky to tam nefunguje. To snad není možné, že to nejde... |
||
Davex Profil |
Nemáš ten .htaccess a skripty v nějakém podadresáři?
Kdybys třeba všechno měl v podadresáři /projekt/ , tak musíš ten adresář uvést buď v RewriteBase nebo přímo v přepisovacím pravidle.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ /projekt/$1.php [L] |
||
Milan1236000 Profil |
Davex:
Mám tam podadresář. Je to takováhle struktura: PC: C:\wamp\www\projekt Ve složce projekt jsou všechny soubory, i .htaccess. URL: http://localhost/projekt/index.php Nyní tam tedy mám: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^([^.]+)$ /projekt/$1.php [L] Teď už bych jen potřeboval, aby se přesměrovávalo, když tam tu příponu napíšu, na stránku bez přípony. Někde jsem viděl, že by mohlo stačit smazat přípony .php u všech souborů, ale to se mi nechce.
|
||
juriad Profil |
#13 · Zasláno: 1. 11. 2015, 20:54:19
Milan1236000:
Viz část # přesměrování na verzi bez přípony na Diskuse JPW: Řešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony |
||
Milan1236000 Profil |
juriad:
Díky moc. Už vše funguje, jak má. Musel jsem ale ještě přejmenovat adresář, protože se to z nějakého důvodu zobrazovalo špatně u některých položek. Po přejmenování už jde úplně vše. -- Ještě taková drobnost. Mám v adresáři projekt složku se stejným názvem jako jeden soubor php ve složce projekt .
I když do .htaccess zkopíruji odsud: Diskuse JPW: Řešení některých častějších problémů (FAQ) » Stránky s adresou bez přípony
<IfModule mod_negotiation.c> # vypnout automatické vyhledávání alternativ Options -MultiViews </IfModule> Jak se to dá opravit? |
||
Kubo2 Profil |
#15 · Zasláno: 3. 11. 2015, 17:46:15
Milan1236000:
„Musel jsem ale ještě přejmenovat adresář, protože se to z nějakého důvodu zobrazovalo špatně u některých položek. Po přejmenování už jde úplně vše.“ Pravdepodobne client-side browser cache. > Tak se při zobrazení souboru (který má stejný název jako adresář) zobrazí struktura adresáře se stejným názvem jako soubor. > Jak se to dá opravit? Nepomenovávať adresáre a súbory na rovnakej úrovni rovnako. |
||
Milan1236000 Profil |
Kubo2:
To právě potřebuji. Mám soubor interpreti.php a složku interpreti . V URL se správně zobrazuje např. .../interpreti/avicii , ale už ne jen samotné interpreti.php
Nechci to pojmenovávat jinak, ale přinejhorším to budu muset udělat. |
||
Časová prodleva: 14 dní
|
|||
Milan1236000 Profil |
Jak u tohohle
ErrorDocument 404 "http://localhost/projekt/chyba404.php" Díky. |
||
juriad Profil |
Milan1236000:
Nezadáš tam URL, ale jen cestu, tedy /projekt/chyba404.php
httpd.apache.org/docs/2.2/mod/core.html#errordocument, chceš to „internally redirect to a local URL-path to handle the problem/error“ „Note that when you specify an ErrorDocument that points to a remote URL (ie. anything with a method such as http in front of it), Apache will send a redirect to the client to tell it where to find the document, even if the document ends up being on the same server.“ |
||
Milan1236000 Profil |
juriad:
Ano, to je ono. Díky moc. Možná už jen drobnost. Když napíšu do URL cestu, která neexistuje, chybová stránka se zobrazí a v URL zůstane chybně napsaná cesta. Když ale do URL za cokoli napíšu lomeno, zobrazí se stránka bez stylů s výpisem chybové stránky a když kliknu třeba na položku v menu, zůstane tam chybová stránka, ale v URL se za to připsané lomeno připisují cesty a nezobrazí se to správně. |
||
Keeehi Profil |
Odkazuj od kořene webu a bude to dobré.
<a href="/tvuj-odkaz.htm">
To samé i se styly, scripty atp. |
||
Milan1236000 Profil |
Keeehi:
Super, díky. Snad už jen poslední věc. V kořenovým adresáři mám pár složek. Když se do URL napíše cesta do složky, otevře se struktura složky a v ní jednotlivé soubory. Jak se to dá zamezit? |
||
juriad Profil |
#22 · Zasláno: 17. 11. 2015, 18:27:22
Options -Indexes |
||
Milan1236000 Profil |
#23 · Zasláno: 17. 11. 2015, 19:13:15
Skvěle, díky všem. :)
|
||
Časová prodleva: 4 měsíce
|
|||
Milan1236000 Profil |
#24 · Zasláno: 9. 3. 2016, 18:58:43
Zdravím,
po delší době jsem se k tomu opět vrátil a potřeboval bych radu. Mám soubor interpreti.php a podle podmínky se zobrazuje buď seznam interpretů ( http://localhost/hhh/interpreti ) nebo samotný interpret (http://localhost/hhh/interpreti?interpret=adele ).
Do souboru .htaccess jsem přidal: RewriteRule ^interpreti.php/(.*)$ interpreti.php?interpret=$1 , takže se stránka správně zobrazí, když do URL zadám: http://localhost/hhh/interpreti.php/adele , ovšem z nějakého důvodu se nezobrazují obrázky - to je ale nyní vedlejší.
Chtěl bych docílit toho, aby šlo na interprety přistupovat z adresy http://localhost/hhh/interpreti/adele , ale vyzkoušel jsem hodně kombinací typu
RewriteRule ^interpreti\.php/(.*)$ interpreti.php?interpret=$1 RewriteRule ^interpreti[.php]/(.*)$ interpreti.php?interpret=$1 RewriteRule ^interpreti/(.*)$ interpreti.php?interpret=$1 |
||
juriad Profil |
#25 · Zasláno: 9. 3. 2016, 19:11:41
Milan1236000:
Obrázky ti nefungují, protože stránka není najednou v adresáři (z pohledu prohlížeče) http://localhost/hhh/ , ale v adresáři http://localhost/hhh/interpreti.php/ .
Ta poslední možnost by měla fungovat: RewriteRule ^interpreti/(.*)$ |
||
Milan1236000 Profil |
#26 · Zasláno: 9. 3. 2016, 19:20:29
juriad:
Nefunguje, hází to Nenalezeno (i po restartu serveru).
|
||
Milan1236000 Profil |
Smazal jsem
RewriteBase / a zjistil, že když je tam RewriteRule ^interpreti/(.*)$ interpreti.php?interpret=$1 , tak se za parametr interpret přidává přípona .php , tu potřebuji smazat, ale jak?
Když označené lomeno zaměním za pomlčku, tak vše funguje, ale já bych tam chtěl to lomeno. |
||
Kajman Profil |
#28 · Zasláno: 10. 3. 2016, 00:36:56
Konkrétnější pravidla dávejte před obecná a přidejte flag L.
|
||
Milan1236000 Profil |
Kajman:
Dal jsem tohle konkrétnější před to obecné a už to jde. Sice se kvůli tomu nezobrazovaly obrázky, ale to jsem vyřešil přidáním ../ před cestu k obrázku. Jiná možnost mě nenapadla.
Bezva, opět moc díky.) |
||
Časová prodleva: 9 let
|
0