/subdom/ v URL
Neohlídal jsem si to a na Internet prosákla interní adresa fyzického umístění souborů na Internet. Hledal jsem řešení, jak pomocí .htaccess nahradit adresy typu http://tcladin.cz/subdom/www/odkazy/odkazy.php. Kde část /subdom/www/ je fyzické umístění, kterého se chci v URL zbavit. Končil jsem na hlášce redirect pernamently bez vypsání obsahu stránky. Brzy jsem zjistil, že nejsem schopen adresu např. http://tcladin.cz/subdom/www/odkazy/odkazy.php změnit na http://tcladin.cz/odkazy/odkazy.php. Buď jsem jen neznalý nebo to nelze.
Neumím změnit URI s /subdom/www/ na adresu bez tohoto umístění (na serveru /subdom/www/), zároveň toto umístění podstrkávám ?
Potom mi nezbývá než, pokud mám fyzicky na serveru obsah v /subdom/www/, změnit fyzické umístění na serveru na /subdomeny/ a URI z /subdom/www/ přepsat na URI bez /subdom/www/.
Změna fyzického umístění souborů na serveru a směrování v .htaccess
doporučené umístění souborů na serveru
Je správné dodržet tato doporučení. Wedos hosting počítá s tím, že bude použita struktura souborů na serveru tak, že:
- Hlavní doména umístěná v /www_root/ (např. tcladin.cz)
- Subdomény k hlavní doméně umístěná v /www_root/subdom/tretirad (př. pro tretirad.tcladin.cz)
- A aliasy k hlavní doméně umístit v /www_root/domain/asiasdruhyrad.cz (př. pro aliasdruhyrad.cz)
K této struktuře a metodě vkládání nových subdomén a aliasů (viz bod 2 a 3 výše) je založen originální Wedos soubor .htaccess, kterým je definováno kde se má na serveru apache obsah pro konkrétní URI hledat. O to se starají řádky Rewriterule končící parametry [DPI], dříve [L]. A dále jaké adresy se mají jakými nahradit. To jsou řádky RewriteRule s parametrem [R=301].
obsah stadrardního .htaccess dle Wedos
# 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]
přejmenování adresáře subdom a uprava .htaccess
adresáře
změň jméno adresáře /www_root/www/subdom na /www_root/www/subdomeny NUTNÉ - tím již nebude přísupný /subdom fyzicky
.htaccess
změnou v .htaccess subdom na subdomeny NUTNÉ
# subdomeny (s nebo bez www na zacatku)
RewriteCond %{REQUEST_URI} !^subdomeny/
RewriteCond %{REQUEST_URI} !^/subdomeny/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdomeny/%2 -d
RewriteRule (.*) subdomeny/%2/$1 [DPI]
# subdomeny - spravne presmerovani pri chybejicim /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdomeny/[^/]+/(.+[^/])$ /$1/ [R]
přesměrování /subdom/ na bez subdom NENÍ NUTNÉ, SEO Žádoucí - zrychlí přepsání no url bez /subdom ve vyhledávači
#vyporadani se se zaindexovanymi URI s /subdom/, bylo nutne na serveru zmenit umisteni z /subdom na /subdomeny
#URI zacina na /subdom/, pr. URL je http://oop.tcladin.cz/subdom/oop/index.php REQUEST_URI je /subdom/oop
#REQUEST_URI > The path component of the requested URI, such as "/index.html". This notably excludes the query string which is available as as its own variable named QUERY_STRING.
RewriteCond %{REQUEST_URI} ^(/subdom/)
#HTTP_HOST > HTTP headers
#http server ma jmeno napr opencart.tcladin.cz %1= %2=opencart %3=tcladin %4=cz
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
#prepsani z URI s subdom/neco bez lomitka/ na URL, kde $jsou podminky u RewriteRule a % z RewriteCond
#$1=subdom/opencart/ $2=index.php
RewriteRule ^(subdom/[^/]*/)(.*)$ http://%2.%3.%4/$2 [R=301,L]
Pokud nebyla dodržena pravidla Wedos pro umístění souborů hlavní domény. Tj namísto v /www_root/ jsou soubory hlavní domény umístěny v /www_root/subdom/www/. soubor .htaccess vypadá trochu jinak, včetně přesměrování. To by mohlo být např.
#vyporadani se se zaindexovanymi URI s /subdom/www, bylo nutne na serveru zmenit umisteni z /subdom na /subdomeny
#URI zacina na /subdom/, pr. URL je http://tcladin.cz/subdom/www/odkazy/odkazy.php REQUEST_URI je /subdom/www/odkazy/odkazy.php
#REQUEST_URI > The path component of the requested URI, such as "/index.html". This notably excludes the query string which is available as as its own variable named QUERY_STRING.
RewriteCond %{REQUEST_URI} ^(/subdom/)
#HTTP_HOST > HTTP headers
#http server ma jmeno napr tcladin.cz %1= %2=tcladin %3=cz
RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]*)\.([^\.]*)$
#prepsani z URI na URL, kde $jsou podminky u RewriteRule a % z RewriteCond
#$1=subdom/www/ $2=odkazy/odkazy.php
RewriteRule ^(subdom/[^/]*/)(.*)$ http://%2.%3/$2 [R=301,L]
robots.txt NENÍ NUTNÉ - Zabránit indexaci /subdom/ lze zápisem do robots.txt.
Zde v robots.txt se přímo zakazuje přístup robotům. Kdežto rewrite přesměrovává na správnou adresu, což bude pro web (SEO) lepší. Odstranit stránku z indexu vyhledávače jde i jinak, například vložením atributu do html kodu a ve webmaster tools danného vyhledávače.
odstranění zdroje /subdom/ v URL
oprava parametru funkce $_SERVER
celá příčina toho, že na Internetu prosákla adresa s /subdom/ je zřejmně způsobena chybnou interpretací URL aplikací využívající PHP.
V tom případě se radí zkusit najít (najít text ve vzdáleném obsahu pomocí FTP) veškeré funce
a nahradit je funkcí
U mě byla konkrétně chyba jak ve vlastním CMS tak v Joomla 1.5.26. Vyhledal jsem a nahradil (Krusader, TotalCommander, ...)
oprava Joomla administrator URI
po vložení URI pro administraci Joomla
ok, adresa zůstane nepřepsaná, ale adresa s
se přepíše na
/subdom/www/administrator
K správnému nasměrování na URI se zpětným lomítkrm jsem kod na začátek .htaccess pod rewriteengine on
#doplneni lomitka pro url /administrator, jinak se po zadani nasmeruje na napr. /subdom/www/joomla/administrator/
RewriteCond %{REQUEST_URI} administrator$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
nyní se URI přepíše na tu se zpětným lomítkem
Bez flagu [L] v předchozím pravidle se zobrazuje stánka joomly s chybou 404, komponenta nenalezena, viz obr výše, není to ideální řešení,
oprava Prestashop 1.6.0.9 administrator URI
- /admin/themes/default/template/header.tpl
najít $base_url a odstranit --- nepoužito, dá se vypnout v BO je to modul template edti činěco takového
{if isset($base_url_tc)}{$base_url_tc|escape:'html':'UTF-8'}{else} zůstane na 226 jen
<a href="/{$base_url}" id="header_foaccess" target="_blank" title="{l s='View my shop'}">
- /controllers/admin/AdminModulesPositionsController.php
//oprava tc, zobrazovalo URL se /subdom/ a live edit pak byl na stránce 404
//$url = Tools::getCurrentUrlProtocolPrefix().Tools::getHttpHost().$dir.$lang.Dispatcher::getInstance()->createUrl('index', (int)$this->context->language->id, $live_edit_params);
$url = $this->context->shop->getBaseURL().$lang.Dispatcher::getInstance()->createUrl('index', (int)$this->context->language->id, $live_edit_params);
return $url;
- /admin/functions.php
zmněnit -- nepoužito, nemá vliv
$adminObj->path = dirname($_SERVER["PHP_SELF"]); na
$adminObj->path = dirname($_SERVER['REQUEST_URI']);
na závěr
Indexace jiných URL než těch, které admin chce je chyba. Vliv na SEO je negativní. Síla stránky se rozdrobí do více URI.
odkazy
|
Komentáře
#Automaticke doplneni lomitek, viz http://interval.cz/clanky/mod-rewrite-pro-hezka-url-lomitka-adresare-promenne/
RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+ $
RewriteRule ^(.+[^/])$ /$1/ [R=301]
Zjisteno, ze toto reseni neni uplne vhodne. Jelikoz pak nefunguje prihlasenii ve frontendu Joomla CMS.
Misto toho sem dal do .htaccess radek na redirect jen pro konkretni url /administrator/
v .htaccess to vypada to takhle
#doplneni lomitka pro url /administrator, jinak se po zadani nasmeruje na napr. /subd/www/joomla/administrator/
RewriteCond %{REQUEST_URI} administrator$
RewriteRule ^(.*)$ http://%{HTTP_H OST}/$1/ [R=301,L]