Autor | Zpráva | ||
---|---|---|---|
pavelt Profil * |
#1 · Zasláno: 30. 12. 2014, 10:15:24
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'); } } ?> 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 |
#2 · Zasláno: 30. 12. 2014, 11:36:42
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); „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 * |
#3 · Zasláno: 30. 12. 2014, 12:55:54
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 * |
#6 · Zasláno: 30. 12. 2014, 15:45:24
Nevím si rady. Už jen když zadám pro pokus jako pravidlo:
RewriteRule (.*) http://localhost/sablona/index.php?menu=fotogalerie 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 |
#7 · Zasláno: 30. 12. 2014, 19:29:22
pavelt:
jak v současné době vypadá tvůj htaccess? |
||
pavelt Profil * |
#8 · Zasláno: 31. 12. 2014, 07:53:20 · Upravil/a: pavelt
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> Ještě může prý být potíž, že není nainstalovaný mod_rewrite. Jak to zjistím? |
||
Taps Profil |
|||
pavelt Profil * |
#10 · Zasláno: 2. 1. 2015, 11:19:27
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] |
||
Časová prodleva: 9 let
|
0