Autor | Zpráva | ||
---|---|---|---|
Joan Profil |
#1 · Zasláno: 13. 11. 2012, 10:06:29
Pěkný den,
mám fungující web, kde stránky se vkládají do index.php pomocí jediného parametru. Nyní se mi podařilo překopat je tak, že používám parametry dva. Potřebovala bych v .htacces nastavit přesměrování z adres typu: www.subdomena.domena.cz/x na www.subdomena.domena.cz/x/y .
Snažila jsem se inspirovat tady a taky tady, ale já to mám přece jenom jinak a navíc dva parametry. Pravidlo pro přesměrování (asi R = 301, že?) pak dám za pravidlo na zobrazování "pěkných" adres anebo před? Děkuji předem za pomoc! |
||
Joker Profil |
Joan:
Vždyť v tom druhém odkazu se přesně o té situaci píše, cituji: Pokud je cílem adresa ve tvaru example.com/jedna/dva/tri, není nic snazšího než si proměnnou $_GET["url"] rozsekat do pole (adresa bude přepsána na example.com?url=jedna/dva/tri): $adresa = explode("/", $_GET["url"]); Jednotlivé části jsou potom v poli $adresa s příslušnými indexy. Neboli htaccess předá všechno v jednom parametru a PHP si to pak rozdělí jak potřebuje. edit: Aha, problém je trochu někde jinde, ale řešení je stejné, může se o to postarat PHP. Stačí podmínka typu: „Pokud parametr není zadán, jeho hodnota je y“ |
||
Joan Profil |
#3 · Zasláno: 13. 11. 2012, 10:51:30
Joker:
není nic snazšího než si proměnnou $_GET["url"] rozsekat do pole... Ehm, kde? V souboru index.php? Používám jako první parametr $_GET['x'] a jako druhý parametr $_GET['y'] - jak z nich prosím Tě poskládám $_GET['url']. A novou proměnnou $adresa použiji v .htaccessu v RewriteCond? Díky, je to pro mě lehce španělská vesnice... Stačí podmínka typu: „Pokud parametr není zadán, jeho hodnota je y“ U pár odkazů mám pouze první parametr $x, druhého parametru $y zatím netřeba, dokud nepřidám časem další položky. |
||
Joker Profil |
#4 · Zasláno: 13. 11. 2012, 11:29:34
Joan:
„Používám jako první parametr $_GET['x'] a jako druhý parametr $_GET['y']“ Ale jde to udělat tak, že bude třeba $_GET["url"] a z nich se ty x a y vykuchají. Fungování je takové: Mám adresu: web/raz/dva . Místo transformace na web/index.php?x=raz&y=dva se transformuje na web/index.php?url=raz/dva .
No a index.php si prostě převezme url="raz/dva" a rozdělí si to na proměnné či do pole. |
||
Joan Profil |
#5 · Zasláno: 13. 11. 2012, 11:39:24
Joker:
...se transformuje na web/index.php?url=raz/dva Ach tak, už mi svítá. Ale ten přibyvší otazník se mi tam dvakrát nelíbí... Já chci toto přesměrování jen a pouze z důvodu, že pár lidem jsem už poslala odkaz na původní stránky s jedním parametrem a definitivně chci používat parametry dva, takže asi úplně nejjednodušší bude poslat jim odkaz nový... Přesto Ti moc děkuji za Tvůj čas. |
||
Joker Profil |
#6 · Zasláno: 13. 11. 2012, 11:52:47
Joan:
„ten přibyvší otazník se mi tam dvakrát nelíbí“ Tam přece žádný otazník nepřibyl, ten je v obou variantách. Vstupní odkaz je v obou případech stejný, rozdíl je jen v tom, jestli parametry zpracovává htaccess nebo PHP. Považuji PHP za lepší proto, že nevyžaduje další znalosti navíc (odněkud si zkopíruji univerzální htaccess a už na něj nesahám a musím umět jen PHP, oproti té „htaccess“ variantě, která vyžaduje vymyslet a zapsat potenciálně komplikovaná pravidla v syntaxi htaccessu, ale PHP musím umět stejně). Navíc to PHP řešení je robustnější vůči potenciálním úpravám do budoucna, zatímco u „htaccess řešení“ mohou některé druhy úprav být problematické. |
||
Joan Profil |
Joker:
Joj, jsem překvapená hned dvakrát: 1) on není htaccess výlučně nutný pro přesměrování? Vůbec jsem netušila, že to jde i přes PHP! 2) když jsem (zatím na localhostu) zkušebně naklapala do adresního řádku původní adresu s jedním parametrem, článek se načetl! Bez jakékoliv mé úpravy - jak je to možné? Teda - akorát titulek staré verze se "odstěhoval do Humpolce", další odkazy se už načítaly podle dvou parametrů. Původní soubory s jednou proměnnou jsem přepsala na dvouparametrové, takže Apache neměl odkud brát... Takže vlastně nemusím do ničeho zasahovat, pro mě neuvěřitelné, že mi postačí můj původní htaccess: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/?([^/]+)?/?$ ?x=$1&y=$2 [L,QSA] P.S.: A kdybych přece někdy potřebovala to uvedené rozparsování do pole, tak do index.php jen přidám $_GET['url'] = array($_GET['x'], $_GET['y']); $adresa = explode("/", $_GET["url"]); a do htaccessu RewriteRule ^(.+)$ ?url=$adresa [L,QSA] ??
|
||
Joker Profil |
#8 · Zasláno: 13. 11. 2012, 13:46:05
Joan:
„on není htaccess výlučně nutný pro přesměrování? Vůbec jsem netušila, že to jde i přes PHP!“ Přesměrování sice jde udělat i přes PHP, ale to tady vůbec nepotřebujeme. V tomto případě PHP už nepřesměrovává! Zkusím ještě jednou popsat princip: 1. Uživatel zadá třeba: web/x/y 2. Jednoduché pravidlo v .htaccess to přesměruje na web/index.php?url=x/y (toto je jediné přesměrování v celém postupu!) 3. index.php převezme jen jeden parametr, že url je "x/y" 4. Kód v index.php si tu url rozpadne na jednotlivé složky a použije je odpovídajícím způsobem. V kontrastu s postupem: 1. Uživatel zadá třeba: web/x/y 2. Složité pravidlo v .htaccess analyzuje adresu. 3. Přesměruje se na index.php se správně naplněnými jednotlivými parametry 4. Kód v index.php si jen převezme parametry „když jsem (zatím na localhostu) zkušebně naklapala do adresního řádku původní adresu s jedním parametrem, článek se načetl! Bez jakékoliv mé úpravy - jak je to možné?“ To nevím, možná náhoda, resp. ten druhý parametr není nezbytný. „P.S.: A kdybych přece někdy potřebovala to uvedené rozparsování do pole, tak do index.php jen přidám“ No, to by byl nesmysl, když už to je rozdělené, tak proč to zpátky slučovat a pak zase rozdělovat? |
||
Joan Profil |
#9 · Zasláno: 13. 11. 2012, 14:06:31
Vidím, že se musím ještě hóódně učit :-). Moc děkuji za Tvůj čas!
|
||
Časová prodleva: 11 let
|
0