Autor Zpráva
pep10
Profil
Ahoj,

potřebuji přesměrovat:
detail.php?id=1234
na:
detail/1234

Původně jsem měl v htaccess toto:
RewriteEngine On
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteRule ^detail/([^/]+)/?$ detail.php?id=$1

ale po přechodu z webhostingu na vps toto přesměrování přestalo chodit.
Poradí někdo, kde je chyba?
Předem děkuji za radu.
Kajman
Profil
Uvedené pravidlo nepřesměrovává, ale tajně podstrkává
detail/1234
na
detail.php?id=1234

Když zadáte detail/1234, tak tam máte chybovou stránku a nefuguje tedy podstrkávání?
pep10
Profil
Přesně tak, zobrazí se chybová stránka.

Mám tam ještě tyto dvě pravidla, která fungují.

RewriteRule ^kategorie/([^/]+)/?$ category.php?url=$1
RewriteRule ^kategorie/([^/]+)/([^/]+)/ /category.php?url=$1&num=$2 [NC]
Kajman
Profil
Co je v error logu?

A jaký je tedy kompletní obsah .htaccess? A žádná pravidla přímo v konfiguraci apache nemáte? Existuje adresář detail a je v něm nějaký jiný .htaccess?
pep10
Profil
Adresář DETAIL neexistuje stejně tak jako adresář KATEGORIE. Ovšem KATEGORIE funguje, DETAIL už ne.

V detail.php je tato hlavička:
<?php 
include("./admin/nastaveni.php");
$id = $_GET['id'];

$websql=mysql_query("SELECT * FROM web WHERE id='$id'");
$vypis_web = mysql_fetch_array($websql);
    $kategorie = $vypis_web["category"];
    $nazov = $vypis_web["nazov"];
    $adresa = $vypis_web["adresa"];
    $popis = $vypis_web["popis"];

IF($visits==""){
    header('Location: ../404.php');
    exit;
}

$update_visits = mysql_query("UPDATE web SET visits = visits+1 WHERE id='$id'");
?>

Jinak žádné jiné přesměrování nikde není.
Vrátí se stránka 404.php.
Error log nějak najdu?
Konfigurace byla asi úplně čistá po instalaci VPS.
Nevyznám se v tom, tak se omlouvám, za hloupé otázky.
Davex
Profil
pep10:
Vypni si MultiViews.
pep10
Profil
Ikdyž je to vypnuté, tak stejně pořád nic.
Davex
Profil
Problém by také mohl být v tom, že je chyba ve skriptu detail.php, kde není definována proměnná $visits.
pep10
Profil
To tam je, jen jsem to z tý hlavičky vymazal, aby to nebylo tak dlouhý

zde je celá hlavička detail.php
<?php 
include("./admin/nastaveni.php");
$id = $_GET['id'];

$websql=mysql_query("SELECT * FROM web WHERE id='$id'");
$vypis_web = mysql_fetch_array($websql);
    $kategorie = $vypis_web["category"];
    $nazov = $vypis_web["nazov"];
    $adresa = $vypis_web["adresa"];
    $popis = $vypis_web["popis"];
    $datum = $vypis_web["datum"];
    $datum = date("d.m.Y",strtotime("$datum"));
    $visits = $vypis_web["visits"];
    $typ = $vypis_web["typ"];

IF($visits==""){
    header('Location: ../404.php');
    exit;
}

$update_visits = mysql_query("UPDATE web SET visits = visits+1 WHERE id='$id'");
?>

Když toto z hlavičky vymažu
I
IF($visits==""){
    header('Location: ../404.php');
    exit;

Tak se to přesměrovává, ale nevypisuje se z databáze co má, ale přesměrovává.

Jinak pod adresou detail.php?id=1234 se zobrazuje to, co se zobrazovat má.
Davex
Profil
A když změníš začátek adresy detail/ na něco jiného nebo přejmenuješ skript detail.php na něco jiného a změníš to i v přepisovacím pravidle?
pep10
Profil
Ikdyž to přejmenuji a přepíši, tak to hodí stránku 404.php
Davex
Profil
Není náhodou před přepisovacím pravidlem pro detail nějaké obecnější pravidlo, které parametr id skriptu detail.php nepředává?
pep10
Profil
Celý .htaccess vypadá takto:
ErrorDocument 404 http://www.domena.cz/404.php

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^domena.cz
RewriteRule (.*) http://www.domena.cz/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^kategorie/([^/]+)/?$ category.php?url=$1
RewriteRule ^kategorie/([^/]+)/([^/]+)/ /category.php?url=$1&num=$2 [NC]
RewriteRule ^detail/([^/]+)/?$ detail.php?id=$1


Když jsem měl webhosting, tak vše fungovalo, ale jak jsem přešel na VPS, tak mi polovina věcí nefunguje.
Davex
Profil
Vypadá to, že se skriptu detail.php nepředává parametr, ale pokud fungují pravidla pro kategorie, tak by mělo fungovat i to pro detail. Pravidla tedy vypadají v pořádku. Zkus si zapnout RewriteLog, kde by mělo být zaznamenáno konkrétní dění při přepisu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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