Autor Zpráva
Joan
Profil
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
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
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
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
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
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
Vidím, že se musím ještě hóódně učit :-). Moc děkuji za Tvůj čas!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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