.htaccess - mod rewrite - hezčí url – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

.htaccess - mod rewrite - hezčí url – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.com.htaccess - mod rewrite - hezčí url – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
JMM
~ Redaktor
0
Grafoman
29. 11. 2014   #1
-
0
-

Potřebuju poradit jak udělat hezčí url, pač se mi to nedaří.

zkusil sem nějaké .htaccess online generátory, ale výsledek to nepřineslo

RewriteEngine On
RewriteRule ^([^/]*)$ /index.php?zdroj=$1 [L]

na XAMPP to neudělalo nic a na hostingu 500 Internal Server Error

Nahlásit jako SPAM
IP: 89.111.96.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
Kit+15
Guru
29. 11. 2014   #2
-
-1
-
Mimo téma

#1 JMM
Pro hezčí url používám .htaccess: 

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(css|js|icon|zip|rar|png|jpg|gif|pdf)$ index.php [L]

Zbytek řeším v PHP tak, že využiji proměnné

$_SERVER['REQUEST_METHOD']
$_SERVER['REQUEST_URI']
$_POST
$_GET

které parsuji a slepuji dle potřeby.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
29. 11. 2014   #3
-
0
-

crazy: Co se ti na mém řešení nelíbí? Je jednoduché a robustní.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:1056:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
crazy
~ Moderátor
+10
Grafoman
29. 11. 2014   #4
-
0
-

#3 Kit
nabízí se otázka, proč to neřešit přímo na úrovní apache konfigurace

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
Kit+15
Guru
29. 11. 2014   #5
-
0
-

#4 crazy
To jsem kdysi dělával. Pak jsem zjistil, že přenesením této funkčnosti na PHP zachovám rozdělení na parametry předané před a za otazníkem v URL, mohu s nimi manipulovat samostatně. Rozparsovanou část před otazníkem předávám továrně za účelem výroby objektu, $_GET a $_POST zůstávají na předávaná data z formulářů.

Před otazníkem v URL je příkaz, za otazníkem data. Přes REQUEST_METHOD rozliším, zda mám volat controller nebo viewer. To ta verze v .htaccess neudělá.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #6
-
0
-

#4 crazy
dal by si sem řešení?

odkazy v menu sem nakonec vyřešil takto: 

RewriteRule ^contact index.php?zdroj=contact[L]


mám ale problém s ostatníma, např:

  • ?zdroj=articles&id=1&n=1-recenze-fomei-drf-14-makroblesk na ../blog/1-recenze-fomei-drf-14-makroblesk
  • ?zdroj=obrazek&id=17 na ../krajina/17-prehrada-les-kralosvstvi
  • ?zdroj=fotogalerie&kategorie=6 na ../portret
  • ?zdroj=article&kategorie=1 na ../recenze

už se v tom plácám 2 týdny a zatím to moc k úspěchu nevede

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
Kit+15
Guru
2. 12. 2014   #7
-
-1
-
Mimo téma

#6 JMM
crazy umí jen dávat mínusy na odpovědi, které se mu nelíbí.

Nahlásit jako SPAM
IP: 95.129.98.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #8
-
0
-

#7 Kit
myslíš že by bylo možné mi pomoci s úpravou jednodo menšího RS, který používám, aby mi to fungovalo?

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
Kit+15
Guru
2. 12. 2014   #9
-
0
-

#8 JMM
Zkus se podívat, jak se dělá REST API, které by se na to skvěle hodilo. Vidím tady navigaci

  • /blog/id
  • /krajina/id
  • /portret/id
  • /recenze/id

 To se dá udělat touto továrničkou

<?php
$parsedURL = parse_url($_SERVER['REQUEST_URI']);
list($akce, $id) = explode("/", $parsedURL["path"]);
$class = ucfirst($akce) . "_GET";
echo new $class((int) $id);

ke které přidáš třídy Blog_GET, Krajina_GET, Portret_GET a Recenze_GET.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #10
-
-1
-
Mimo téma
Kit -

#9 Kit
samozřejmě, že budu dávat mínusy odpovědím, které se mi nelíbí.

#8 JMM
 

RewriteEngine On
RewriteRule ^blog/([0-9]*)-.*$ index.php?zdroj=articles&id=$1 [L]
RewriteRule ^krajina/([0-9]*)-.*$ index.php?zdroj=obrazek&id=$1 [L]

můžeš to udělat přímo takto, že budeš v _GET mít zdroj a přímo id toho článku (resp. obrázku), protože ten slug asi potřebovat nebudeš.

udělal jsem to pro tvé první dva případy, pro ty ostatní to bude velmi podobné

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #11
-
0
-

#9 Kit

mrknu na to, ale zatím sem z toho trochu zmaten,

Nejsem PHP programátor, jen to co mám dokážu nějako spravovat, případně lehce modifikovat, ale změna URL je asi nad moje možnosti


#10 crazy
tohle mi v XAMPP neběží, Chyba serveru!

pokud to chápu správně tak to ted bude ve tvaru /krajina/17 a já bych místo id potřeboval spíš název který mám v tabulce jako "seo"

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #12
-
0
-

#11 JMM
toto řešení je ale správně, mám MAMP a běží mi to v pořádku i na normálním apache.

Podívej se do logu serveru, co to hází za chybu.

Pokud nebudeš chtít vypisovat každou položku zvlášť, tak můžeš použít RewriteMap, ale pozor: to nelze použít v .htaccess souboru. Budeš to muset nastavit přímo v konfiguraci apache, což není úplně ideální.

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #13
-
0
-

#11 JMM

nene, url může být například /blog/17-nazev-clanku, ale vrati ti to pouze ?zdroj=clanek&id=17  abys nemusel parsovat ten "slug"

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #14
-
0
-

#12 crazy
 

[Tue Dec 02 14:46:25.526184 2014] [core:alert] [pid 8020:tid 1864] [client ::1:51088] C:/xampp/htdocs/project/.htaccess: RewriteRule: bad flag delimiters

ps: omylem sem to asi označil jako vyřešené, mohl někdo ten status dát pryč?

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #15
-
0
-

#14 JMM
Toto je většinou způsobeno whitespacy či nechtěnými znaky, můžeš prosím sem poslat celý tvůj htaccess?

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #16
-
0
-

#15 crazy
sry sem blbej, sem si to blbě zkopíroval a jak sem tam měl už hodně těch pravidel co sem zkoušel, sem si nevšiml že mi tam chybí na konci [L] ukončovací závorka   

Každopádně mi to s url nic nedělá  

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #17
-
0
-

#16 JMM
url ti to měnit nemá, pokud zadas neco jako localhost/projekt/blog/17-clanek , tak url ti zustane stejna, ale kod by se mel chovat, jako by to bylo localhost/index.php?zdroj=articles&id=17

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #18
-
0
-

#17 crazy
jo takhle už to chápu jak to bylo myšleno... ale řeší to jen spíš úpravu kompatibility stávající url se seo. Asi bych to potřeboval pořešit i v rámci toho jednoduchého RS, ale na to by se asi musel podívat nějakej zkušenější programátor PHP zda by to šlo nějako jednoduše předělat. Pokud bys měl chvilku budu tu po 16 hod: skype: malyphoto

ted to tedy funguje tak, že /blog/1 nebo /krajina/17 pač v ID je je jen číslo

Nahlásit jako SPAM
IP: 89.111.99.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #19
-
0
-

#18 JMM
no teď bude fungovat i /blog/17-nazev-clanku a podobně. Co přesně tedy s těmí odkazy chceš pořešit? prostě ty odkazy piš v tomhle hezčím tvaru.

Já jdu za chvíli spát, takže po 16 hod tu určitě nebudu, ale klidně se zeptej tady. 

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
JMM
~ Redaktor
0
Grafoman
2. 12. 2014   #20
-
0
-

#19 crazy
no rád bych aby mi z toho RS lezly už seo url.

mám teď volání odkazu članku takto

<a href="./?zdroj=articles&amp;id='.$article['id'].'&amp;n='.$article['seo'].'">'.$article[name].'</a>

a v index.php

switch ($_GET['zdroj'])
    case 'article':
      $content = $tpl->load($templates_dir.'article.tpl');
      $content = $tpl->assign('content_2',$con->article(),$content);
      $title = 'Blog |';
      $select5 = ' class="active"';
      $bodyClass = 'blog';
      break; 
}
Nahlásit jako SPAM
IP: 89.111.96.–
Jan Malý | web: www.malyphoto.cz, @malyphoto
Kit+15
Guru
2. 12. 2014   #21
-
0
-

#20 JMM
Místo "?article=..." přece máš "/blog/..."

K čemu je tam dobrý ten switch?

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
crazy
~ Moderátor
+10
Grafoman
2. 12. 2014   #22
-
0
-

#20 JMM
linky si musíš tvořit sám

Nahlásit jako SPAM
IP: 89.103.111.–
All you need is vision and time.
goro37
~ Anonymní uživatel
1 příspěvek
26. 12. 2014   #23
-
0
-

Ahoj mužete mi poradit? mám dlouhou adresu příklad  

videa.php?fotky=dve

chtěl jsem jí zkratit přesměrovaním a podstrčením asi takto

RewriteRule (.*)$  /jedna.php [R]
RewriteRule jedna.php $1 

že když zadam třeba
videa.php?fotky=dve
tak jsem chtěl že mi to přesměruje na jedna.php
a vzápětí se do jedna.php podstrčí videa.php?fotky=dveže bude dlouha adresa přesmerovana na jedna.php
něco mi v kodu chybý nevíte někdo jak ho dostavit?

Nahlásit jako SPAM
IP: 83.208.21.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý