Autor Zpráva
Hitman
Profil
Dobrý den,

nikde se mi nepodařilo vyřešit problém:

RewriteRule ^(.*) index.php?id=$1

Tohle mi funguje v pořádku, adresa je potom web.cz/neco

Potřeboval bych ale přidat i koncové lomítko: web.cz/neco/. Zkoušel jsem:

RewriteRule ^(.*)/$ index.php?id=$1 [QSA,L]

Bohužel nefunguje...
Davex
Profil
Fungovat by to mělo, ale záleží na tom, co od toho přesně očekáváš. Když přidáš na konec adresy lomítko, tak se snad spustí skript i s původním pravidlem, nebo ne?
Kajman
Profil
Jak to nefunguje? Máte tam jen toto pravidlo, nic jiného a /neco/ nezavolá index.php?id=neco ?
Keeehi
Profil
Hitman:
Hledáš to na špatném místě. Musíš to hledat v aplikací na tom místě, kde se odkazy tvoří. Tohle jen zajišťuje, aby se ten už vytvořený odkaz dostal na správné místo.
Hitman
Profil
No pokud mám v htaccess první řešení, očekávám že:

web.cz/pepa se bude tvářit jakobych zadal web.cz/index.php?id=pepa . To funguje.

Pokud ale použiji druhou variantu, očekávám že web.cz/pepa/ se bude tvářit jako bych zadal web.cz/index.php?id=pepa. To nefunguje.

Potom v index.php přes get žjišťuji onu adresu a z db vybírám příslušná data. Dělám to špatně?

Keeehi
Tvé odpovědi moc nerozumím, odkazy bych chtěl mít ve tvaru web.cz/nejaka-podstranka/ namísto web.cz/nejaka-podstranka - bylo mi doporučeno, že adresy končící lomítkem jsou lepší, bez koncového lomítka jsou spíše soubory...ale předpokládám že je to asi jedno. Ale když už né kvůli tomuto, tak minimálně z principu by mě to zajímalo.
Keeehi
Profil
Hitman:
Potom v index.php přes get žjišťuji onu adresu
A když použiješ první variantu, do URL zadáš web.cz/nejaka-podstranka/ tak v $_GET['id'] nemáš /nejaka-podstranka/ ?
Hitman
Profil
Bez toho prvního lomítka ano. Tak už jsem na to přišel, hádalo se mi to s druhým přesměrováním.

V htaccess mám totiž ještě:

#RewriteRule ^(.*)/$ $1.php [QSA,L]
RewriteRule ^([^.]+)/$ $1.php [QSA,L]

Mám totiž některé stránky jako stranka.php a některé bych chtěl volat přes GET. Pokud tam dám všechny 3 řádky:

#RewriteRule ^(.*)/$ $1.php [QSA,L]
RewriteRule ^([^.]+)/$ $1.php [QSA,L] 


RewriteRule ^(.*)/ index.php?id=$1

Tak to vyhodí chybu. Je nějak možné to spojit, aby fungovalo oboje dohromady? Tedy:

neco.php -> /neco/
index.php?id=pepa -> /pepa/

//Něco jako RewriteRule ^([^.]+)/$ $1.php [QSA,L] POKUD NEVRACÍ ŽÁDNÝ VÝSLEDEK (není žádná stránka .php) POUŽIJ -> RewriteRule ^(.*)/ index.php?id=$1
Taps
Profil
Hitman:
Mám totiž některé stránky jako stranka.php a některé bych chtěl volat přes GET.
Důležité je to nějakým způsobem rozlišovat v url adrese.
RewriteRule ^podstranka/(.*)/ index.php?id=$1
RewriteRule ^([^.]+)/$ $1.php [QSA,L] 
a pak v odkaze mít něco takového
<a href="podstranka/web">web</a>
Keeehi
Profil
Standardně se používá RewriteCond %{REQUEST_FILENAME} !-f pro nepřepisované adresy

Ovšem v tvém případě by to mělo být něco jako
RewriteCond %{REQUEST_URI}.php !-f
- rozhodně toto není správně, musíš odstranit koncové lomítko a možná ještě něco, ale víš co máš hledat.
Hitman
Profil
Taps

Právě mi jde o to, nerozlišovat je.

Uživatel zadá adresu web.cz/neco/ . A potřeboval bych aby se v htaccess provedlo RewriteRule ^([^.]+)/$ $1.php [QSA,L], čili hledá neco.php. Pokud ji najde, vrátí obsah. Pokud ne, použije RewriteRule ^(.*)/ index.php?id=$1 a bude tak hledat zda existuje index.php?id=neco.

Je to možné takto spojit?

Keehi

V htaccess tedy mám mít?:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI}.php !-f

RewriteRule ^.* - [L]

#RewriteRule ^(.*)/$ $1.php [QSA,L]
RewriteRule ^([^.]+)/$ $1.php [QSA,L] 


RewriteRule ^(.*)/ index.php?id=$1
Davex
Profil
Hitman:
Normálně by to bylo celkem jednoduché a stačilo by přidat podmínky k otestování existence souborů, ale tím lomítkem se to trochu komplikuje a musí se kolem toho napsat další orloj. Obecně se dá jako základ použít kombinace dvou pravidel z FAQ.
Hitman
Profil
Aha, netušil jsem že je to tak složité. S htaccess si příšliš nerozumím, takže to asi vyřším uložením souborů .php do db a budu vše tahat přes get.

Každopádně díky všem.
Hitman
Profil
A ještě mě tedy napadla jedna věc. Použiji:

RewriteRule ^(.*)/ index.php?id=$1

Pokud ale zadám web.cz/neco bez koncového lomítka vyhodí to chybu. Je možné to přesměrovat na adresu s lomítkem?
Keeehi
Profil
Hitman:
Ano jde to přesměrovat. Snad to bude správně

RewriteRule [^/]$ $0/ [L,R=302]
Hitman
Profil
Keeehi:

Tak pokud přidám tento řádek, píše mi to chybu serveru 500. Je to možné?
Keeehi
Profil
Hitman:
Možné to je, ovšem nevidím důvod proč. Jedině, že bys ho vložil na nějaké hodně špatné místo.
Davex
Profil
Keeehi:
Jenom drobná chybička. Asi by mělo být $0.

Hitman:
Opravdu ti stojí za to, dát si tolik práce s přidáním naprosto zbytečného lomítka do adresy?
Keeehi
Profil
Síla zvyku. Opět opraveno, díky.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0