Autor Zpráva
pavelt
Profil *
Potřebuji vytvořit úplně jednoduchý web a mám potíž, kdy kód se chová, jakoby nebyla nastavena proměnná $menu.

obsah index.php:

<?php
    if (IsSet($_GET['menu'])) 
    { 
    $menu = $_GET['menu'];
    $menu_upravene = eregi_replace('[^0-9a-z\-\_]', '', $_GET['menu']);
    }
    else 
    {
    $menu_upravene = 'kontakt';
    }
    
                    switch ($menu_upravene)
                { 
                    case 'kontakt':        { include('include/kontakt.php'); } break;
                    case 'fotogalerie':        { include('include/fotogalerie.php'); } break;
                    case 'ke_stazeni':         { include('include/ke_stazeni.php'); } break;
                    case 'dulezite_vedet':    { include('include/dulezite_vedet.php'); } break;

                    default:             { include('chyba.php'); }
                }
?>
možná bude problém v přepisování URL, kterému, popravdě řečeno úplně nerozumím, převzal jsem jej z jiného webu a prosím o kontrolu.
původní URL je: index.php?menu=odkaz
nová URL je: odkaz.htm
obsah .htaccess:

RewriteEngine On
RewriteBase /mujweb.cz
RewriteCond %{QUERY_STRING} ^menu=([^&]+)$
RewriteRule ^index\.php$ %1.htm? [R=301,L,NE]
RewriteRule ^([^/]+)\.htm index.php?rw=1&menu=$1 [L,QSA]

Není třeba přepsat hodnotu RewriteBase /mujweb.cz na jinou, když testuji na localhost?
Bude takto vytvořený kód bezpečný?
Děkuju Pavel
Alphard
Profil
Než ručně luštit, co přesně to udělá, je lepší si to odkrokovat. Někam na začátek dejte
var_dump($_GET);
a hned uvidíte, co máte na vstupu. Podle toho si pak opravíte .htaccess soubor, nebo ten php script.

Bude takto vytvořený kód bezpečný?
Měl by být. Vzledem k tomu, že $menu_upravene nepoužíváte pro dynamické includování, ale máte whitelist přímo ve switchi, bylo by to v pořádku i bez toho replace na 5. řádku.
pavelt
Profil *
Děkuju.
Když mám url
http://localhost/sablona/index.php?menu=kontakt
výpis je: array(1) { ["menu"]=> string(7) "kontakt" } a navigace pomocí $menu funguje .
Jakmile napíšu URL ve tvaru http://localhost/sablona/kontakt.htm ,
Ukáže se Error 404, objekt nenalezen.
Předpokládám na špatně nastavený .htaccess. Prosím o pomoc s ním.
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9]+)\.htm index.php?menu=$1 [L,QSA]
xROAL
Profil
Skús takúto zmenu:
RewriteEngine On
RewriteBase /sablona/ # resp. adresár v ktorom pracuješ, pokiaľ necháš len /, súbor sa bude hľadať v koreňovom adresári, čo asi nechceš
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9]+)\.htm index.php?menu=$1 [L,QSA]
quatzael
Profil
pavelt:
Rozdíl máš v tom URL. Stránku máš na index.php, ale v .htaccess to nepřepíšeš a zůstane Ti tam kontakt.php.
pavelt
Profil *
Nevím si rady. Už jen když zadám pro pokus jako pravidlo:
RewriteRule    (.*)    http://localhost/sablona/index.php?menu=fotogalerie
vypisuje se při URL: http://localhost/sablona/index.php?menu=kontakt
array(1) { ["menu"]=> string(7) "kontakt" }
a ne fotogalerie, jak bych čekal.
To bylo jen pro test, přepsání z .htm na index.php?menu= teď už vůbec nevím, jak zprovoznit.
Je chyba v regulárním výrazu, nebo mi přepisování nefunguje vůbec?
Taps
Profil
pavelt:
jak v současné době vypadá tvůj htaccess?
pavelt
Profil *
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-zA-Z0-9]+)\.htm index.php?menu=$1 [L,QSA]

---
Děkuji


Ještě jsem zjistil, že je třeba použití .htaccess povolit v Apachi, a tak jsem v httpd.conf změnil Allow override takto:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    #AllowOverride None
     AllowOverride All
    Require all granted
</Directory>
Ani tak hezké URL, po restartu Apache, nefungují.
Ještě může prý být potíž, že není nainstalovaný mod_rewrite. Jak to zjistím?
Taps
Profil
pavelt:
Řešení některých častějších problémů (FAQ) » Jak zapnout modul mod_rewrite v Apache
pavelt
Profil *
Přepisování na hezkou URL už mi funguje, problém byl v pravidle, kde jsem neměl uvedeno podtržítko a v url ho používal.
RewriteRule ^([a-zA-Z0-9_]+)\.htm sablona/index.php?menu=$1 [L,QSA]

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0