Autor Zpráva
Yuhů
Profil
Dámy a pánové, doufám, že mi někdo konečně pomůžete. Jsem z toho už úplnej magor. Potřebuju jasně slyšet, jak to vyřešit, nebo že to nejde. Mám následující zadání. Potřebuju, aby:

odkazy vedly na url:
/index.php?clanek=12345

server, pokud dostane požadavek na tuto stránku, přesměroval na
/clanek-12345

a následně při požadavku na ten článek s URL
/clanek-12345
aby vrátil OBSAH, který předtím byl na
/index.php?clanek=12345

Jestli máte ten pocit, že to bude cyklit, tak já ten pocit mám taky. Ale podobnou funkčnost potřebuju pro tuto diskusi.

O mod_rewrite jsem už četl tuny chvalozpěvů. Já sice chápu, že je krásné, že mi mod_rewrite přepíše dynamické adresy na statické, ale já nechci v odkazech používat statické adresy, protože bych musel přepisovat celou aplikaci. Chápete mě?

Pomůžete někdo? Dohady si prosím nechte od cesty, potřebuju radu od někoho, kdo tomu rozumí. Díky!
izsak
Profil
Nemusí sa to zacyklit, pokiaľ sa správne nastavia parametre v RewriteRule.

RedirectMatch permanent index\.php?clanek=(.*)$ /clanek-$1

RewriteEngine On
RewriteRule ^/clanek-(.*)$ /index.php?clanek=$1 [L]

Nemalo by nastať zacyklenie, keďže RewriteRule má aj nastavenie [PT] (passthrough), ktoré sa používa vtedy, keď treba prepísanú cestu ďalej presmerovať. Čiže normálne nastane len prepísanie cesty, ktorá už nie je ďalej upravovaná/spracovaná s mod_alias (RedirectMatch).
Aleš Janda
Profil *
Řešil jsem něco podobného - dával jsem pryč přípony .php tak, že jsem na ně odkazoval mod_rewritem, ale naopak aby při přímém volání s .php bylo přesměrování 301 na stránku bez přípony.

Ten RedirectMatch, co tu psal izsak, mi nefugoval, tak jsem to udělal následovně:
v souboru .php s funkcemi, který vkládám do každé stránky, jsem přidal funkci

function ZkontrolujBezpriponovost() {
if (StrPos($_SERVER["REQUEST_URI"],'?')) {
$adresa=SubStr($_SERVER["REQUEST_URI"],0,StrPos($_SERVER["REQUEST_URI" ],'?'));
$zbytek=SubStr($_SERVER["REQUEST_URI"],StrPos($_SERVER["REQUEST_URI"], '?'));
}
else {
$adresa=$_SERVER["REQUEST_URI"];
$zbytek="";
}

if (StrToLower(SubStr($adresa,-4)) == ".php") {
$adresa=SubStr($adresa,0,-4);
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://".$_SERVER["HTTP_HOST"].$adresa.$zbytek);
Header("Connection: close");
Die("");
}
}

kterou zavolám při každém požadavku na stránku. Ta pak udělá/neudělá redirect na správnou stránku.

Myslím, že tvůj problém by šel řešit obdobně.


Jen mám jeden dotaz k tomu mod_rewrite: Pokud mám v .htaccess pravidlo

RewriteRule ^([-_a-z]+)$ $1.php [L]

tak mi to přidá hlavičku do $_SERVER: REDIRECT_STATUS: 200
Co to je? (Nikde jsem to nenašel)
Yuhů
Profil
reaguji na Izsaka

> RedirectMatch permanent index\.php?clanek=(.*)$ /clanek-$1

tohle je krásná idea, ale nefunguje to. Mod_alias a RedirectMatch celou část URL za otazníkem ignoruje.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0