Autor Zpráva
ludvalb
Profil
Zdárek,
mám problém se kterým si nevím rady.

potřeboval bych aby se po zadání url adresy www.neco.cz presmerovala na www.neco.cz/index.php?page=uvod a aby se to rovnou tvarilo jako www.neco.cz/uvod/


stránka nemusí být index.php


Jde mi hlavně o to, že potřebuji získat $_GET['page']; na začátku stránky.

ději za pomoc.


zkoušel jsem varianty z http://mike.treba.cz/mod_rewrite-a-hezke-url/ ale došel jsem jen do faze hezkych adres jako třeba www.neco.cz/postranka což vlastně je www.neco.cz/index.php?page=podstranka

zde je kod který jsem použil.

RewriteEngine on

RewriteRule ^index.php http://www.neco.cz/hlavni.php?page=uvod [R=301]  ---- toto funguje pouze pokud zadám www.neco.cz/index.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?page=$1



funguje mi i když zadám www.neco.cz/uvod ale nedaří se ni nato přesměrovat.
Davex
Profil
Asi hledáš něco takového?

Mod_rewrite - Změna dynamických adres na statické
ludvalb
Profil
s tím si dokážu poradit, to mi i tak nějak funguje. Potřebuji, ale aby mi to fungovalo i pokud zadám pouze www.neco.cz a nemusel jsem zadávat www.neco.cz/index.php.

Pokud zadám www.neco.cz/index.php, pak vše běží jak má. i se mi vztváředí hezké url www.neco.cz/podtranka
pokud zadám ručně nebo pomocí odkazu www.neco.cz/postranka pak je také vše v pořádku.

Potřebuji vyřešit jen první přístup na doménu.
Mám to na vlastním hostingu s apachem, možná mám jen něco špatně v http.conf
Davex
Profil
A problém je v čem? Na úvodní stránce www.neco.cz/ zobrazit obsah jako na www.neco.cz/index.php?page=uvod? To stačí ošetřit v PHP skriptu a není potřeba nikam přesměrovávat.
ludvalb
Profil
jde o to, že se mi nevytvoří proměnná page a pak mám chyby v obsahu (používám register_globals=on), pak dále mám, že pokud $page=""; tak se přiřadí $page="uvod"; a vloží obsah stránky uvod.

  if ((string)$_GET["page"]!='') $page=$_GET["page"]; else $page ="uvod";
  if (is_file("./".$page.".htm")):
    include $page.".htm";
  elseif (is_file("./".$page.".php")):
    include $page.".php";
  else: include "notfound.php";
  endif;

problém je ale v tom, že $page se vytvoří až po proběhnutí if ((string)$_GET["page"]!='')

proto jsem to chtěl vyřešit přesměrováním a získat tak $_GET["page"]
Davex
Profil
ludvalb:
problém je ale v tom, že $page se vytvoří až po proběhnutí if ((string)$_GET["page"]!='')
A ten kód upravit nemůžeš?

Jinak tento kód může být celkem slušná bezpečností díra a na úvod doporučuji alespoň základní zabezpečení.

<?php
if (isset($_GET["page"]) && is_string($_GET["page"])) {
  $page = basename(preg_replace("~[\\x00-\\x1f]~u", "", $_GET["page"]));
} else {
  $page = "";
}
if ($page == "" ) {
  $page = "uvod";
} elseif (strlen($page) > 240) {
  $page = "notfound";
}
ludvalb
Profil
Tvůj kod mi sice nefungoval, i když má smysl, ale modifikoval jsem svůj kod a vše již běží skvěle.

  if (isset($_GET["page"]) && is_string($_GET["page"])){
   $page = basename(preg_replace("~[\\x00-\\x1f]~u", "", $_GET["page"])); 
  }else{
   $page = basename(preg_replace("~[\\x00-\\x1f]~u", "", "uvod"));
  }

  if (is_file("./".$page.".htm")):
    include $page.".htm";
  elseif (is_file("./".$page.".php")):
    include $page.".php";
  else: include "notfound.php";
  endif;

děkuji za pomoc s řešením tohoto problému.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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