Autor | Zpráva | ||
---|---|---|---|
richard.zavodny Profil * |
#1 · Zasláno: 20. 7. 2015, 18:54:11
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 |
#2 · Zasláno: 20. 7. 2015, 20:08:16
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 * |
#3 · Zasláno: 20. 7. 2015, 20:43:21
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 |
#4 · Zasláno: 20. 7. 2015, 20:58:55
richard.zavodny:
a nefunguje ani když dáš místo RewriteRule ^(.*)$ /?page=$1 [L] RewriteRule ^(.*)$ index.php?page=$1 [QSA,L] |
||
richard.zavodny Profil * |
#5 · Zasláno: 20. 7. 2015, 21:18:31 · Upravil/a: richard.zavodny
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 |
#6 · Zasláno: 20. 7. 2015, 23:03:47
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 * |
#7 · Zasláno: 21. 7. 2015, 00:47:29
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 * |
#9 · Zasláno: 21. 7. 2015, 01:40:20
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 * |
#11 · Zasláno: 21. 7. 2015, 20:31:08
Díky moc, Již mi to funguje jak jsem si představoval. Ještě jednou díky a adminy prosím o zamčení.
|
||
Časová prodleva: 10 let
|
0