Autor | Zpráva | ||
---|---|---|---|
technik Profil |
#1 · Zasláno: 16. 3. 2010, 15:22:18
Vím, už se to tu řešilo bezpočtukrát. .htaccess soubor je pro mě španělská vesnice a proto si nevím s úpravami Vašich příkladů rady.
Potřeboval bych něco podobného: * adresy index.php?proměnná1=hodnota&proměnná2=hodnota2 převést na www.adresa.cz/id_clanku-nazev-clanku * to aby se mi v případě že otevřu www.adresa.cz/adresar otevřela složka s adresářem a né článek a ještě jedno. Nevím zda to jde v .htaccess udělat > zakázat prohledávacím robotům "chodit" do adresáře /adresar v rootu. Díky T. |
||
technik Profil |
#2 · Zasláno: 16. 3. 2010, 15:38:34 · Upravil/a: technik
V souboru mám zatím jen:
ErrorDocument 404 adresar/data/error404.html ErrorDocument 403 adresar/data/error403.html # deny from IP_ADRESA_DOPLNIT RewriteRule ^index\.php$ /$1 [R=301] |
||
Radim24 Profil |
#3 · Zasláno: 16. 3. 2010, 15:55:25
Já se taky brzo chystám na hezké url, tak bych se přidal do diskuse. Ptal jsem se někoho, kdo tomu rozumí (ale je to už delší doba) a zjistil jsem, že to není jen o tom samotném přejmenování. Pokud se chystáte programovat nový web tak jako já, tak asi by bylo dobré se zamyslet nad tím jaké informace chcete předávat na tom webu celkově a celkově jak by měl web fungovat. Když tak mě klidně poupravte pokud se pletu, ale k čemu jsem teda došel já.
Udělal bych nějaké pravidlo, které mi převede nějakou adresu, např. ve formátu: domena.cz/sekce/znacka/zbozi/druh/nazev-produktu/akce popř. domena.cz/sekce/znacka/zbozi/druh/nazev-produktu/akce.php?id=cislo_produktu na domena.cz/index.php?a=akce&sec=sekce&zn=znacka&zb=zbozi&dr=druh&na=nazev&id=cislo_produktu php script pak pracuje s tím posledním formátem adresy. Není nutné, aby to převádělo přímo na ty zkratky. Je ale ještě nutné počítat s absolutním odkazováním na scripty .js a na stylopisy, obrázky, fotky, audio a video. A teď si nejsem jistý, ale myslím, že by se do pravidla měla uvést nějaká vyjímka, že pokud tam bude něco jako: domena.cz/images domena.cz/videos domena.cz/audio domena.cz/scripty tak aby se adresa neměnila. Nebo jak to udělat, aby zůstala cesta k multimediálním souborům, stylopisům a js bez změny? |
||
SwimX Profil |
#4 · Zasláno: 16. 3. 2010, 16:33:08
Já používám toto:
# zakázání listování diru Options -Indexes ErrorDocument 403 /shop/index.php?xxx=forbiden ErrorDocument 404 /shop/index.php?xxx=stranka-nenalezena RewriteEngine On RewriteBase /shop/ #přesměrování na verzi s www Options +FollowSymlinks RewriteCond %{HTTP_HOST} ^pra.sps-pi.com RewriteRule (.*) http://www.pra.sps-pi.com/shop/$1 [R=301,QSA,L] #aby nahrazoval jen neexistující soubory a složky RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #to co nemá nakonci lomítko ho mít bude :) RewriteCond %{REQUEST_URI} !^(.*)/$ RewriteRule ^(.*)$ http://www.pra.sps-pi.com/shop/$1/ [L,R=301] #aby nahrazoval jen neexistující soubory a složky RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #cokoli za / přepíše do proměnné xxx RewriteRule ^((.+)+/?)*$ index.php?xxx=$2 [L,QSA] <FilesMatch "\.(php|html?)$"> AddDefaultCharset utf-8 </FilesMatch> pak mám v proměnné $_GET['xxx'] např: elektronika/pocitace/acer/blabla-46/ na záčátku index.php se zavolá funkce uloz_rozeber($_GET['xxx']); která projde proměnnou, a vytvoří pole dir1 až dirn podle lomítek. Ve skriptech tedy pracuji s proměnnými $url['dir1'], což je první část URL v tomto případě elektronika. Nikdy jsem nezapsal problém, a velmi mi to vyhovuje. |
||
Radim24 Profil |
#5 · Zasláno: 16. 3. 2010, 16:48:46 · Upravil/a: Radim24
SwimX:
Aha, takže vlastně je zbytečné psát něco jako ?bla=bla&pom=pom, stačí něco jako ?arg=asd/asd/asd/asd/asd/asd/ Ale to musíš přesně vědět, co který parametr v přesném pořadí znamená... Nebylo by ale lepší a spolehlivější to udělat jako takto: domena.cz/index.php&a=akce&sec=sekce&zn=znacka&zb=zbozi&dr=druh&na=nazev&id=cislo_produktu a pak by se třeba vytvořilo pole: $pole['a'] $pole['sec'] $pole['zn'] atd, Nebo to nadefinovat do konstant.... pomocí define() Co? A prosímtě, ještě mi vysvětli tohle pravidlo, zdá se mi to jakési složité a nechápu proč to tam je: ((.+)+/?)* |
||
SwimX Profil |
#6 · Zasláno: 16. 3. 2010, 18:04:47
Radim24:
spolehlivější? to nevím, záleží to na tobě. Já to dělám takle: 1. pokud neexistuje proměnná dir1 ($url['dir1']) přesměruju na /halvni-strana/ 2. mám logicky url, tedy první parametr dir1 mi určuje o co se jedná (produkty, clanky, hlavni-strana, administrace) 3. includuju příslušný soubor switc($url['dir1']) {case "hlavni-strana": include "pages/uvod.php"; break; ....... takže pokud mám eshop a nahoře je: obchodní podmínky. To je článek uložený v DB v tabulce články, tak odkaz na to bude: /clanky/obchodni-podminky/ naincluduje se soubor clanky, ve kterém už je napsáno: SELECT FROM table blááá a vypíše mi na obrazovku znění články, který se menuje obchodni-podminky Myslím si, že je to univerzálnější než v htaccesuu mít ?sekce=clanky&url=obchodni-podminky protože třeba u produktů, bude první parametr dir1 kategorie, dir2 podkategorie, dir3 teprve produkt. > podle dir 1 naincluduju příslušný soubor a pak už očekávám správně seřazená url (pokud nejsou > include pages/notfound.php s errorem) ((.+)+/?)* to znamená> (.+) cokoli ale aspoň jeden znak (.+)+ alespoň jednou /? lomítko být může a nemusí ((.+)+/?)* a to celé několikrát, i nulakrát Asi by to šlo napsat jednodušeji, ale je to htaccess který použivám už x let, kdysi jsem to vymyslel takle, tak to tak zůstalo :)) Snad to pomůže |
||
Radim24 Profil |
#7 · Zasláno: 16. 3. 2010, 18:21:37 · Upravil/a: Radim24
Asi jsme si trochu neporozuměli.
V htaccesu určitě nebude nic jako ?sekce=clanky&url=obchodni-podminky To ne! Hlavní je dostat to nějak jako jeden řetězec za index.php. Ale to už je v podstatě proměnná, takže bych použil tu tvou formuli nebo něco podobného #cokoli za / přepíše do proměnné xxx RewriteRule ^((.+)+/?)*$ index.php?xxx=$2 [L,QSA] Mě šlo jen o ten formát toho zápisu pro soubor .php tedy a) /asa/sf/asfd/fasf -- tvoje řešení b) &a=as&b=as&c=as&d=as Ale toho tvého způsobu mi přijde blbé, že bych si nemusel pamatovat co vlastně zpracovává $url['dir1'], takže bych to spíše pojmenoval $url['akce']. Jinak mě teda ještě napadlo použít místo pole konstanty. Výhodu to má v tom, že se to snadněji píše. Vlastně jsem nikdy konstanty nepoužíval, ale nejspíš začnu. Akorád nevím jestli je nutné je deklarovat do funkcí jako global nebo to nepotřebují (a to by bylo velké plus!). |
||
Chamurappi Profil |
#8 · Zasláno: 16. 3. 2010, 18:30:36 · Upravil/a: Chamurappi
Vidím tu spoustu textu, ale nevšiml jsem si, že by někdo řešil trojici dotazů technika.
Reaguji na Radima24: „Já se taky brzo chystám na hezké url, tak bych se přidal do diskuse.“ S naprosto nesouvisejícím dotazem. Takhle bys mohl vpadnout do půlky vláken v příslušné kategorii. Je to přinejmenším drzé. Až budete ty nebo SwimX psát další příspěvek, založte jím nové vlákno a já (nebo někdo z kolegů) tam zdejší dialog přesunu (příspěvky se řadí podle času, takže se dostane před ten zakládající). |
||
Radim24 Profil |
#9 · Zasláno: 16. 3. 2010, 21:33:47 · Upravil/a: Radim24
Ten první příspěvek byl určený technikovi . Chtěl jsem mu pomoct tu záležitost nejdříve pochopit z principového hlediska, než se pustí do tvorby těch pravidel.
Odpověď ale už dostal v příspěvku od SwimX, ale asi by to měl někdo přepsat, aby to sedělo technikovi. Ja bych jen upravil tu linu od SwimX: #aby nahrazoval jen neexistující soubory a složky RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^((.+)+/?)*$ index.php?xxx=$2 [L,QSA] #cokoli za / přepíše do proměnné xxx Ale netestoval jsem to. Pak už je to jen záležitost PHPčka, jak si ten řetězec rozparsuje. To popisoval SwimX: "pak mám v proměnné $_GET['xxx'] např: elektronika/pocitace/acer/blabla-46/ na záčátku index.php se zavolá funkce uloz_rozeber($_GET['xxx']); " |
||
technik Profil |
#10 · Zasláno: 17. 3. 2010, 15:37:15
Děkuji za rady, snad to nějak zužitkuju.
T. |
||
Časová prodleva: 4 roky
|
|||
Teofil Profil * |
#11 · Zasláno: 3. 11. 2013, 22:50:06
Ahoj. Mám problém s nastavením pěkných adres. Potřebuji u jednoduchého webu, kde jsou všeho všudy 4 podstránky s koncovkou .php vytvořit tvar bez toho ".php".
Vložil jsem si do .htaccessu tento kód podle vašich rad: RewriteEngine on RewriteCond %{REQUEST_FILENAME} -f [NC,OR] RewriteCond %{REQUEST_FILENAME} -d [NC] RewriteRule .* - [L] RewriteRule ^([\w-]+)$ /$1.php [L,QSA] Omlouvám se všem znalcům. Jsem v tomto směru asi lama ;-) |
||
Davex Profil |
#12 · Zasláno: 3. 11. 2013, 23:23:35
|
||
Časová prodleva: 11 let
|
0