Autor Zpráva
richard.zavodny
Profil *
Zdravím, mám tento kód
RewriteEngine On
RewriteBase /sub/shortener

# ?page=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=$1 [L]

Dělá to že přepisuje url adresu z ?page=xx na /xx Já momentálně ale potřebuji aby mi při zadání adresy /xxxxxx (jedná se o identifikátor složen ze všech 26 znaků které se používají v URL, tj. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopkrstuvwxyz0123456789-_) se mi podstrčila stránka /?page=redirect&shorturl=xxxxxx

Jak toho docílím? Díky moc :)
Taps
Profil
richard.zavodny:
RewriteEngine On
RewriteBase /sub/shortener
 
# ?page=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=redirect&shorturl=$1 [L]
richard.zavodny
Profil *
Díky. Jenom mám problém. v tom kódu co jsem posílal
RewriteEngine On
RewriteBase /sub/shortener
 
# ?page=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=$1 [L]

mi prostě nefunguje přepisování ?page=home, ?page=shorturl atd. Hází mi to smyčku při přesměrování.
Taps
Profil
richard.zavodny:
a nefunguje ani když dáš místo
RewriteRule ^(.*)$ /?page=$1 [L]
níže uvedený zápis ?
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
richard.zavodny
Profil *
Ne ne. Furt nefunguje :-/ ve složce pages mám .php soubory a ty volám skriptem

if(file_exists('pages/'.$_GET['page'].'.php')){
                    require_once('pages/'.$_GET['page'].'.php');
                } else {
                    require_once('pages/404.php');
                }

Jde o zkracovač url. Prostě potřebuji aby při zadání stránky např. /home nebo /shorturl podstrčila stránka ?page=home nebo ?page=shorturl

Potom mám také stránku ?page=redirect s parametrem &shorturl=xxxxxx kde xxxxxx je ten identifikátor. Při zobrazení stránky /xxxxxx chci aby se mi tedy podstrčilo toto ?page=redirect&shorturl=xxxxxx Toto funguje bezproblému.


momentálně mám v .htaccess toto:

RewriteEngine On
RewriteBase /sub/shortener

# ?page=redirect&shorturl=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=redirect&shorturl=$1 [L]

# ?page=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
Keeehi
Profil
richard.zavodny:
Je to jednoduché, ten regulár na 7. řádku je moc obecný. Proto sežere všechno a k řádku 12 se nic nedostane. Měl by vypadat asi takto

RewriteRule ^([a-zA-Z0-9_-]{32})$ index.php?page=redirect&shorturl=$1 [L] (možná tam za ^ chybí /)
richard.zavodny
Profil *
Funguje mi podstrčení z ?page=xx na /xx

Co to dělá můžete vidět tady.

Kód je takový:

RewriteEngine On
RewriteBase /sub/shortener

# ?page=xx -> /xx
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?page=$1 

Ale nějak to nechce fungovat. Prostě to nesmí kolidovat s tímto přepisem.
juriad
Profil
richard.zavodny:
Jak ty jako člověk poznáš z adresy:
/blabla, zda se má přepsat na /index.php?page=blabla nebo na /index.php?page=redirect&shorturl=blabla
Až dokážeš odpovědět na tuto otázku, bude možné vyřešit tvůj problém.
richard.zavodny
Profil *
Takhle: Dělám zkracovač url. Mám základní kostru webu v index.php v kořenáči. Ze souboru index.php volám stránky ze složky pages. Ve složce jsou tři soubory (tj. tři stránky) home.php, shorturl.php, redirect.php. V souboru home.php formulář z toho se data odesílají do souboru shorturl.php kde se vygeneruje krátký šestimísný identifikátor který se uloží do databáze společně s dlouhou url adresou. Potom mám redirect.php ten zajišťuje to že přesměrovává na url adresu kterou si dohledá pomocí krátkého identifikátoru v db.

Takže jako uživatel nepoznám jestli /blabla je stránka tj. ?page=blabla a nebo identifikátor pro přesměrování ?page=redirect&shortur=blabla.

Prostě chci aby mi fungovalo hlavní přepisování tj. ?page=xx -> xx tedy zobrazení stránky uložené ve složce pages
A aby mi taky fungovalo ?page=redirect&shorturl=xxxxxx -> /xxxxxx tedy přesměrování.
Keeehi
Profil
Když to nepoznáš ty, nepozná to ani stroj! Řešením je buď to v URL rozlišit (třeba ten zkracovač prefixovat s r/), nebo to všechno cpát třeba na index.php?inurl=$1 a tam zkoumat, co se vlastně chce. To co mi přišlo mám uložené v databázi? Tak to bude to přesměrování. To co mi přišlo mám jako soubor ve složce pages? Tak ho includnu. To co mi přišlo vůbec neznám? Zahlásím 404.

Pokud to blabla pro zkracovač dokážeš ale rozlišit od ostatních třeba délkou - když to má deset znaků, je to zkracovač, když to má více nebo méně tak už ne, tak se to dá řešit v htaccess. Ale je snad jasné, že pak ve složce pages nesmíš mít soubor malysoubor.php, protože jeho jméno je dlouhé deset znaků a použere ho zkracovač.
richard.zavodny
Profil *
Díky moc, Již mi to funguje jak jsem si představoval. Ještě jednou díky a adminy prosím o zamčení.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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