Autor Zpráva
Marschmallow
Profil
Dobrý den,
mám u Wedos webhostingový alias. To znamená, že všechny domény mám na FTP řazené takto: www/domains/prvni-domena.cz a www/domains/druha-domena.cz
Po zadání prvni-domena.cz, nebo druha-domena.cz a kliknutí na nějaký interní odkaz, třeba prvni-domena.cz/nejaky+odkaz, mě to přesměruje na ošklivou adresu prvni-domena.cz/domains/prvni-domena.cz/nejaky+odkaz. Můj dotaz tedy zní, jak bych mohl z této ošklivé URL adresy udělat hezkou, tedy pouze prvni-domena.cz/nejaky+odkaz.
Ve složce www mám již od Wedosu tenhle .htaccess:
# htaccess rules for subdomains and aliases
# to create new subdomain, create a folder www/subdom/(subdomain name)
# to create web for alias, create a folder www/domains/(whole domain name)

# htaccess pravidla pro subdomeny a samostatne weby aliasu
# pro vytvoreni subdomeny vytvorte adresar www/subdom/(nazev subdomeny)
# pro vytvoreni webu pro alias vytvorte adresar www/domains/(cely domenovy nazev)
# dalsi info a priklady: http://kb.wedos.com/r/32/webhosting-htaccess.html

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]

Děkuji předem :)
Joker
Profil
Marschmallow:
To popsané chování je divné.
Pokud mám na FTP například www/domains/nejaka-domena a doména je nasměrovaná na něj, nemělo by to tohle dělat.

Není spíš špatně nastavená ta doména?
Marschmallow
Profil
Joker:
Odkaz na web: mujskript.cz


Projevuje se to po kliknutí na jakýkoliv interní odkaz. Dělá to i při jednoduchém HTML souboru odkazujícím na jiný soubor.
Davex
Profil
Joker:
To popsané chování je divné.
Je to divné, ale není to chyba. Na zmíněném hostingu je to vlastnost. Používaný redakční systém nemá tušení o té opičárně s přepisováním domén do podadresářů a odvozuje kořenovou cestu v odkazech (své umístění) z přepsané cesty %{DOCUMENT_ROOT}/domains/%2.


Marschmallow:
Dělá to i při jednoduchém HTML souboru odkazujícím na jiný soubor.
Přepisování adres pomocí mod_rewrite nijak nezasahuje do odkazů na stránce, takže je vyloučené, aby odkaz ze stránky na správné adrese směřoval na špatnou adresu.
Marschmallow
Profil
Joker, Davex:
Tak jsem včera psal na podporu a prý se mi má dnes ozvat jejich technik. Tak Vám tady (snad) napíšu řešení.
Marschmallow
Profil
Marschmallow:
Tak je to částečně vyřešeno takto:
# htaccess rules for subdomains and aliases
# to create new subdomain, create a folder www/subdom/(subdomain name)
# to create web for alias, create a folder www/domains/(whole domain name)

# htaccess pravidla pro subdomeny a samostatne weby aliasu
# pro vytvoreni subdomeny vytvorte adresar www/subdom/(nazev subdomeny)
# pro vytvoreni webu pro alias vytvorte adresar www/domains/(cely domenovy nazev)
# dalsi info a priklady: http://kb.wedos.com/r/32/webhosting-htaccess.html

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]
Jenže mi zase nefunguje posílání dat pomocí PHP v Joomle, napíše mi to "Neplatný token", psal jsem Wedosu a prý to vyřeší.
Kajman
Profil
Marschmallow:
Jaký rozdíl je mezi kódem v [#6] a [#1]?
Marschmallow
Profil
Kajman:
Taky jsem si říkal, asi něco nastavili v administraci.
Marschmallow
Profil
Dobrý den, tak už jsem to vyřešil - adresářová struktura:
www/domains/prvni-domena.cz
www/domains/mujskript.cz
ve složce www/ je .htaccess jako v [#6].

Jen mi to teď začalo vypisovat chybu, která s .htaccess určitě nemá nic společného:
Notice: Undefined property: JPagination::$pagesTotal in /data/web/virtuals/73***/virtual/www/domains/mujskript.cz/templates/meembo-blue/html/com_content/category/default_articles.php on line 173
Pokud si ten soubor otevřu, na řádku 173 vidím:
<?php if (($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
Přikládám sem i celý soubor default_articles.php s kódem:
<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_content
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

$app = JFactory::getApplication();


JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.framework');

$n = count($this->items);
$listOrder    = $this->escape($this->state->get('list.ordering'));
$listDirn    = $this->escape($this->state->get('list.direction'));
?>

<?php if (empty($this->items)) : ?>

    <?php if ($this->params->get('show_no_articles', 1)) : ?>
        <p><?php echo JText::_('COM_CONTENT_NO_ARTICLES'); ?></p>
    <?php endif; ?>

<?php else : ?>

<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
    <?php if ($this->params->get('filter_field') != 'hide') : ?>
    <fieldset class="filters">
        <legend class="hidelabeltxt">
            <?php echo JText::_('JGLOBAL_FILTER_LABEL'); ?>
        </legend>

        <div class="filter-search">
            <label class="filter-search-lbl" for="filter-search"><?php echo JText::_('COM_CONTENT_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?></label>
            <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" />
        </div>
    <?php endif; ?>

    <?php if ($this->params->get('show_pagination_limit')) : ?>
        <div class="display-limit">
            <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?> 
            <?php echo $this->pagination->getLimitBox(); ?>
        </div>
    <?php endif; ?>

    <?php if ($this->params->get('filter_field') != 'hide') :?>
    </fieldset>
    <?php endif; ?>

    <div class="clr"></div>

    <table class="category">
        <?php if ($this->params->get('show_headings')) :?>
        <thead>
            <tr>

                <th class="list-title" id="tableOrdering">
                    <?php echo JHtml::_('grid.sort', 'COM_CONTENT_HEADING_TITLE', 'a.title', $listDirn, $listOrder); ?>
                </th>

                <?php if ($date = $this->params->get('list_show_date')) : ?>
                <th class="list-date" id="tableOrdering2">
                    <?php if ($date == "created") : ?>
                        <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.created', $listDirn, $listOrder); ?>
                    <?php elseif ($date == "modified") : ?>
                        <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.modified', $listDirn, $listOrder); ?>
                    <?php elseif ($date == "published") : ?>
                        <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.publish_up', $listDirn, $listOrder); ?>
                    <?php endif; ?>
                </th>
                <?php endif; ?>

                <?php if ($this->params->get('list_show_author', 1)) : ?>
                <th class="list-author" id="tableOrdering3">
                    <?php echo JHtml::_('grid.sort', 'JAUTHOR', 'author', $listDirn, $listOrder); ?>
                </th>
                <?php endif; ?>

                <?php if ($this->params->get('list_show_hits', 1)) : ?>
                <th class="list-hits" id="tableOrdering4">
                    <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?>
                </th>
                <?php endif; ?>
            </tr>
        </thead>
        <?php endif; ?>

        <tbody>

            <?php foreach ($this->items as $i => &$article) : ?>
            <tr class="cat-list-row<?php echo $i % 2; ?>">

                <?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?>

                    <td class="list-title">
                        <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid)); ?>">
                            <?php echo $this->escape($article->title); ?></a>
                    </td>

                    <?php if ($this->params->get('list_show_date')) : ?>
                    <td class="list-date">
                        <?php
                        echo JHtml::_(
                            'date', $article->displayDate, $this->escape(
                                $this->params->get('date_format', JText::_('DATE_FORMAT_LC3'))
                            )
                        ); ?>
                    </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('list_show_author', 1)) : ?>
                    <td class="list-author">
                        <?php if (!empty($article->author) || !empty($article->created_by_alias)) : ?>
                            <?php $author = $article->author ?>
                            <?php $author = ($article->created_by_alias ? $article->created_by_alias : $author);?>

                            <?php if (!empty($article->contactid ) &&  $this->params->get('link_author') == true):?>
                                <?php echo JHtml::_(
                                        'link',
                                        JRoute::_('index.php?option=com_contact&view=contact&id='.$article->contactid),
                                        $author
                                ); ?>

                            <?php else :?>
                                <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
                            <?php endif; ?>
                        <?php endif; ?>
                    </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('list_show_hits', 1)) : ?>
                    <td class="list-hits">
                        <?php echo $article->hits; ?>
                    </td>
                    <?php endif; ?>

                <?php else : ?>
                <td>
                    <?php
                        echo $this->escape($article->title).' : ';
                        $menu        = JFactory::getApplication()->getMenu();
                        $active        = $menu->getActive();
                        $itemId        = $active->id;
                        $link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId);
                        $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug));
                        $fullURL = new JURI($link);
                        $fullURL->setVar('return', base64_encode($returnURL));
                    ?>
                    <a href="<?php echo $fullURL; ?>" class="register">
                    <?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?></a>
                </td>
                <?php endif; ?>

            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
<?php endif; ?>

<?php // Code to add a link to submit an article. ?>
<?php if ($this->category->getParams()->get('access-create')) : ?>
    <?php echo JHtml::_('icon.create', $this->category, $this->category->params, array(), true); ?>
<?php  endif; ?>

<?php // Add pagination links ?>
<?php if (!empty($this->items)) : ?>
    <?php if (($this->params->def('show_pagination', 2) == 1  || ($this->params->get('show_pagination') == 2)) && ($this->pagination->pagesTotal > 1)) : ?>
    <div class="pagination">

        <?php if ($this->params->def('show_pagination_results', 1)) : ?>
             <p class="counter">
                <?php echo $this->pagination->getPagesCounter(); ?>
            </p>
        <?php  endif; ?>

        <?php echo $this->pagination->getPagesLinks(); ?>
    </div>
    <?php endif; ?>

    <div>
        <input type="hidden" name="task" value="" />
        <input type="hidden" name="filter_order" value="" />
        <input type="hidden" name="filter_order_Dir" value="" />
        <input type="hidden" name="limitstart" value="" />
    </div>
</form>
<?php endif; ?>
Nevěděl by někdo, kde je chyba? Živá ukázka.
Děkuji
Davex
Profil
Marschmallow:
Dobrý den, tak už jsem to vyřešil - adresářová struktura:
To znamená, že se původní problém vyřešil po nějaké změně adresářové struktury? Připadá mi, že je stejná jako předtím.

Jen mi to teď začalo vypisovat chybu
To není chyba, ale jen upozornění, že by něco mohlo být špatně.
Marschmallow
Profil
Davex:
Připadá mi, že je stejná jako předtím.
Předtím ta struktura byla takto:
www/ je kořenovým adresářem domény prvni-domena.cz
www/domains/mujskript.cz je kořenovým adresářem domény mujskript.cz

Nyní je to takto:
www/ nachází se zde pouze složka domains a soubor .htaccess jako v [#6]
www/domains/prvni-domena.cz je kořenovým adresářem domény prvni-domena.cz
www/domains/mujskript.cz je kořenovým adresářem domény mujskript.cz
Marschmallow
Profil
Davex:
Teď koukám na první příspěvek a tam jsem se špatně vyjádřil. Taky to chtělo ještě v Globálním nastavení nastavit přepis URL, aby tam nebylo to index.php/.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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