Autor Zpráva
jindrakuba
Profil
Ahojte. Mám problém, který se projevuje jen na novém hostingu u Wedosu. Nefunguje mi PHP include. Web mi běží ve složce www/domains/htc-one.cz (jedná se o hosting pro více domén) ... Na IC.CZ mi vše funguje tak jak má, na novém hostingu se zobrazí jen index stránka , ale php asi nefunguje... Tady je index :
<?php

ini_set('display_errors',1);
error_reporting(E_ALL | E_STRICT);

global $tpl;

$tpl['include_path'] = dirname(__FILE__).'/';

if (!empty($_GET['path'])) {
    $tpl['path'] = explode('/', trim($_GET['path'], '/'));
    $tpl['get_path'] = htmlspecialchars($_GET['path']);
} else {
    $tpl['path'] = array();
    $tpl['get_path'] = '';
}


if (empty($tpl['path'])) {
    $tpl['template'] = 'index';
} else {
    if (count($tpl['path']) == 1) {
        $tpl['template'] = $tpl['path'][0];
    } else {
        $tpl['template'] = implode('_', $tpl['path']);
    }
}

$tpl['template_file'] = $tpl['include_path'].'templates/'.$tpl['template'].'.phtml';

if (file_exists($tpl['template_file'])) {
    $file = file_get_contents($tpl['template_file']);
    $pos = mb_strpos($file, '<p', 0, 'utf-8');
    if ($pos !== false) {
        $offset_begin = mb_strpos($file, '>', $pos, 'utf-8');
        $offset_end = mb_strpos($file, '</p>', 0, 'utf-8');
        $tpl['description'] = mb_substr($file, $offset_begin+1, $offset_end-$offset_begin, 'utf-8');
        $tpl['description'] = preg_replace('~[[:space:]]+~', ' ', strip_tags($tpl['description']));
    } else {
        $tpl['description'] = null;
    }
    
    include_once $tpl['template_file'];
} else {
    header('HTTP/1.1 404 Not Found');
    include_once $tpl['include_path'].'templates/404.phtml';
}

?>

Tady htaccess :
# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

<FilesMatch "\.phtml$">
  Order Deny,Allow
  Deny From All
</FilesMatch>

ErrorDocument 404 /404/

RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

Neví někdo co s tím ? :( je divné, že na ic.cz to běhá .. není to něco v htaccess ?
Davex
Profil
Poslední přepisovací pravidlo (všechno za ErrorDocument 404 /404/) bych dal do samostatného souboru .htaccess v adresáři www/domains/htc-one.cz.
jindrakuba
Profil
Davex:
Děkuji za snahu, ale nic se nezměnilo .... Zajímavé je, že ať dám do adresy za www.htc-one.cz/cokoli , vždy web zobrazuje pouze úvodní index ....
Alphard
Profil
jindrakuba:
Ten kód je zbytečně dlouhý. Kontrolním výpisy proměnných snad můžete lépe zaměřit problém. Minimálně zjistit, jestli to souvisí s .htaccess nebo ne.
jindrakuba
Profil
Alphard:
Právě že se v PHP nevyznám ... Proto hledám radu tady v PHP :) Jinak toto řešení includování jsem našel zde :
http://mike.treba.cz/dynamicke-skladani-stranek-pomoci-include-dil-ii/
Možná to pomůže ve vyřešení problému


jindrakuba:
Nefunguje jen to adresarove razeni .... takto to funguje :
http://www.htc-one.cz/index.php?path=htc-one-x

jenze adresa ma vypadat takto :
http://www.htc-one.cz/htc-one-x/

.... nevíte někdo ?
jindrakuba
Profil
Ahojte. Tak už jsem malinko rozluštil problém. Chyba bude v php scriptu, který vypisuje proměnou "template" ... Tady jsem trošku upravil stránku 404, kde je vše vidět http://www.htc-one.cz/htc-one-x/

Za template se dosazuje "domains_htc-one.cz_htc-one-x" což je ale špatně, potřebuji aby se dosadilo jen "htc-one-x"

Zde přikládám část PHP, která se stará o proměnné..
global $tpl;

$tpl['include_path'] = dirname(__FILE__).'/';

if (!empty($_GET['path'])) {
    $tpl['path'] = explode('/', trim($_GET['path'], '/'));
    $tpl['get_path'] = htmlspecialchars($_GET['path']);
} else {
    $tpl['path'] = array();
    $tpl['get_path'] = '';
}


if (empty($tpl['path'])) {
    $tpl['template'] = 'index';
} else {
    if (count($tpl['path']) == 1) {
        $tpl['template'] = $tpl['path'][0];
    } else {
        $tpl['template'] = implode('_', $tpl['path']);
    }
}

$tpl['template_file'] = $tpl['include_path'].'templates/'.$tpl['template'].'.phtml';

Pokud to může být kvůli htaccess (jedná se o htaccess přímo ve složce www/domains/htc-one-x - tedy v kořenovém adresáři kde má běžet web jako alias), tak tady přikládám také výpis :
RewriteEngine On 
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
Davex
Profil
Skoro to vypadá, že jsi tato pravidla nechal i v souboru /www/.htaccess. Měla by být pouze v souboru .htaccess pro tu jednu doménu.
jindrakuba
Profil
Davex:
Bohužel nenechal ... OK bude to nejspíše chyba v HTACCESS .. Takže tady je výpis z kořenového (../www/.htaccess)
RewriteEngine On

# cele domeny (aliasy)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]

# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

# aliasy - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]

# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

A tady pro www/domains/htc-one.cz/.htaccess
<FilesMatch "\.phtml$">
  Order Deny,Allow
  Deny From All
</FilesMatch>
 
ErrorDocument 404 /404/

RewriteEngine On 
RewriteBase /
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]
Nebyl by tu někdo ochoten pomoci klidně po icq ? Není problém dát údaje k FTP ...
Davex
Profil
Pravidla pro Wordpress jsi v souboru /www/.htaccess předtím neměl, tak je dej také pryč. V tomto souboru by asi další pravidla být neměla.
jindrakuba
Profil
Davex:
Tyjo necekal jsem, ze bude stacit smazat pravidla pro wordpress .... Smazánim se odstranil můj problém .... Ale ve složce ../www/ provozuji web na wordpressu ... tim že jsem to smazal mi to přestalo ject .. ale zase mi jede web ve www/domains/htc-one.cz/ .... Takže další otázka .. jak to udělat ? Jak to skloubit ? :) Jinak stejně moc děkuji, je to pokrok :)


jindrakuba:
Tak jinak ... jak upravit, aby ten wordpress zápis plati jen pro složku ../www/ , ale neplatil pro ../www/domains/ ? Půjde to nějak ? ... Další možnost mě napadla že bych obsah složky www hodil do domains/adresa .... což by ale asi rozhodilo wp .. :D .. ach jooo
Davex
Profil
jindrakuba:
Nastavení v souboru www/.htaccess platí pro všechny a budou aplikována vždy (jinak by nefungovalo rozhazování domén do podadresáře domains/). Správné řešení je přesunout Wordpress do adresáře domains/adresa/ a pravidla pro něj mít v souboru .htaccess jen tam. Wordpress si často upravuje soubor .htaccess sám, takže to bude v samostatném adresáři spolehlivější.
jindrakuba
Profil
Davex:
OK děkuji moc :) No tak ok jde se na to .... jsem zvědavej, jak to bude fungovat a za jak dlouho wordpress zprovozním :D ...

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0