Aliasy a chybné URL adresy

Pokud na vašem webhostingu používáte aliasy či subdomény, dochází k tomu, že soubory webu na aliasu či subdoméně jsou ve skutečnosti umístěny jinde než kam ukazuje URL adresa.

Příklad – web není alias:

  • URL adresa: http://www.neni-alias.cz/adresar/soubor.php
  • umístění ve vašem webhostingu: /adresar/soubor.php

Příklad – web je alias:

  • URL adresa: http://www.nejaky-alias.cz/adresar/soubor.php
  • umístění ve vašem webhostingu: /domains/nejaky-alias.cz/adresar/soubor.php

V prvním příkladě URL umístění odpovídá fyzickému umístění. Ale ve druhém příkladě je URL umístění odlišné od fyzického umístění. Pro správné fungování je tedy potřeba zajistit překlad cest v obou směrech.

překlad URL adresa -> fyzické umístění se stará námi připravený soubor .htaccess, kde jsou nadefinována potřebná pravidla. Když tedy přijde HTTP požadavek na URL adresu http://www.nejaky-alias.cz/adresar/soubor.php, .htaccess interně tuto adresu přepíše na http://www.nejaky-alias.cz/domains/nejaky-alias.cz/adresar/soubor.php a teprve poté se požadavek provede. Zde obvykle problém nebývá.

O překlad fyzické umístění -> URL adresa se však musí postarat samotná PHP aplikace, to .htaccess neřeší. Jde tedy o to, jaké URL adresy vkládá PHP aplikace do generovaného HTML kódu.

PHP a „aktuální“ URL adresa

PHP skript tedy musí nějak umět zjistit, na které URL adrese se nachází, aby správně mohl sestavovat další URL odkazy na podstránky apod.

Špatná PHP aplikace si aktuální URL adresu načítá z proměnné $_SERVER[„PHP_SELF“] nebo $_SERVER[„SCRIPT_NAME“]. Avšak toto nejsou proměnné obsahující URL adresu, to jsou proměnné obsahující informaci o fyzickém umístění aktuálně spuštěného PHP skriptu. Z toho se správnou cestu, kterou máte vložit do URL adresy, nedozvíte! Pokud se vám tedy do vašich stránek sestavují URL adresy podobné následující, je chyba zde.

<a href="/domains/nejaky-alias.cz/odkaz/jinam.php">odkaz</a>

Prvním řešením tohoto problému je úprava PHP aplikace tak, aby prováděla detekci aktuální URL správným způsobem ze správné proměnné.

Toto je chybný způsob, jak zjistit aktuální cestu:

$aktualni_adresar = dirname($_SERVER["PHP_SELF"]);

Toto je správný způsob pomocí proměnné $_SERVER[„REQUEST_URI“]:

$aktualni_adresar = dirname($_SERVER["REQUEST_URI"]);

Teoreticky tedy stačí nahradit $_SERVER[„PHP_SELF“] za $_SERVER[„REQUEST_URI“]. Prakticky to může být komplikovanější v závislosti na tom, jak je vámi PHP aplikace naprogramovaná.

Druhým řešením, které nabízí některé redakční systémy, je explicitní nastavení bázové URL adresy, kterou systém používá. PHP skripty se pak tedy o žádnou detekci aktuální URL nepokouší, ale mají ji pevně dánu v konfiguraci. V této znalostní bázi naleznete příslušný postup pro následující systémy:

Poznámka:

V případě, že Vám bude po instalaci na subdoméně Joomla vracet všude chybu No input file specified, tak prověďte následující úpravu:

V souboru .htaccess přidejte:

RewriteCond %{REQUEST_URI} ^/index\.php/
RewriteRule ^index.php/(.*) /$1 [R,L]