Как сделать постоянные ссылки

svz

Новичок
Спасибо за помощь.
Изучаю mod_rewrite
Написал строки

RewriteBase /
RewriteRule ^(.*)production/(.*)$ $1production.php?title=$2

Страничка действительно получается та, что нужно, только изчезли картинки и CSS
Что делать не знаю
Помогите!
 

Духовность™

Продвинутый новичок
Не нужно mod_rewrite использовать для построения ЧПУ
нужно переадресовывать все запросы в index.php и на основании вариаций Url-адресов подключать тот или иной модуль
 

svz

Новичок
Духовность™

Если не затруднит, то выложите кусочек кода с разбором Url и переадресацией
 

Духовность™

Продвинутый новичок
Духовность™

Если не затруднит, то выложите кусочек кода с разбором Url и переадресацией
Пишем карту урлов:
PHP:
return array
(
    // Frontend
    array( 'pattern' => '~^/$~',
           'module' => 'index',
           'controller' => 'index'
         ),
    array( 'pattern' => '~^/categories/?$~',
           'module' => 'category',
           'controller' => 'frontend-categories-list',
         ),
    array( 'pattern' => '~^/categories(/[a-z0-9_/\-]+/)$~',
           'module' => 'advert',
           'controller' => 'frontend-category-list',
           'aliases' => array('category_url'),
         ),
    array( 'pattern' => '~^/categories(/[a-z0-9_/\-]+/)(.+)\.xhtml$~',
           'module' => 'advert',
           'controller' => 'view',
           'aliases' => array('category_url', 'id'),
         ),
и т.д

в htaccess
PHP:
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|jpeg|png|css|cur|php|phtml|doc|xls|txt)$ [NC]
RewriteRule (.*) index.php?_path=/$1&%{QUERY_STRING} [L]
имея переменную _path сравниваем URL с картой урлов.

PHP:
   /**
     * Разбирает текущий URI-запрос, который передается в качестве аргумента,
     * и сравнивает его с одним из паттернов URL-карты $this->routes.
     * Если совпадение найдено, то в объект-оболочку Request записывается информация
     * из карт, такая как
     * - имя модуля
     * - имя контролера
     * - запрошеный URI-адрес
     * - параметры запроса.
     *
     * @param string URI-запрос
     * @return boolean true если для запроса $uri найдены совпадения в $this->routes
     *                 и false в противном случае.
     * @todo: сделать проверку на физическое наличие упомянутого в карте $this->routes контроллера.
     */
    private function compareRequestWithUriRoutes($uri)
    {
        foreach ($this->routes as $map)
        {
            if (preg_match($map['pattern'], $uri, $params))
            {
                array_shift($params);

                foreach ($params as $index => $value)
                {
                    $this->context->getRequest()->getRequest()->{$map['aliases'][$index]} = $value;
                }

                $this->context->getRequest()->getRequest()->setModuleName(new Krugozor_Http_UriPartEntity($map['module']));
                $this->context->getRequest()->getRequest()->setControllerName(new Krugozor_Http_UriPartEntity($map['controller']));
                $this->context->getRequest()->getRequest()->setUri($uri);

                return true;
            }
        }

        return false;
    }
 

AmdY

Пью пиво
Команда форума
Духовность™
в википедии статья об MVC твоя?
 

svz

Новичок
Духовность™

Спасибо за столь подробный ответ.
Мне пока сложно разобраться в таких наворотах.
Я использую только простые конструкции PHP.
Поэтому я просто заменяю адрес в .htaccess и у меня все хорошо работает.

Я не понял, чем ваш подход отличается от mod_rewrite, если вы все равно используйте переадресацию в .htaccess

Еще раз спасибо!
 

SergXP

Новичок
не знаю прокатит ли, но как вариант можно попробовать в HTML шаблоне написать между <head></head> такой тег:
PHP:
<base href="http://твойсайт.ru/"></base>
и допустим твои css находятся по адресу http://site.ru/style/default.css
подключаешь
PHP:
<link rel="stylesheet" type="text/css" href="style/default.css" />
так же с изображениями и тд)
 

SergXP

Новичок
Пользуюсь данным методом, вполне удобно.

В чем путаница и почему?
 

fixxxer

К.О.
Партнер клуба
В общем случае на SERVER_NAME полагаться не стоит - это по сути просто константа задаваемая в конфиге веб-сервера, и там, в принципе, может оказаться что угодно - что админу в голову взбрело. HTTP_HOST надежнее, но в принципе тоже может отсутствовать (http/1.0 без host заголовка). Более-менее надежно - HTTP_HOST ?: SERVER_NAME
 

VANHALEN

Новичок
В общем случае на SERVER_NAME полагаться не стоит - это по сути просто константа задаваемая в конфиге веб-сервера, и там, в принципе, может оказаться что угодно - что админу в голову взбрело. HTTP_HOST надежнее, но в принципе тоже может отсутствовать (http/1.0 без host заголовка). Более-менее надежно - HTTP_HOST ?: SERVER_NAME
Да да... В каждом конкретном случае ещё проверить придётся однозначно, но мне как-то всё-равно больше нравится вариант с переменной, чем руками писать.
 

tXcode

Умный кодер
Подскажите как на сайте сделать постоянные ссылки на статьи из базы данных
т.е. сейчас я обращаюсь к страничке так http://MySite.Ru/production.php?title=prod1
а надо http://MySite.Ru/production/prod1..html
Не слушай этих злых дядек (на данном этапе познания PHP и т.к.) ))

У тебя пропали CSS и картинки ибо код твой код режет все))) Добавь 2 строки в него, которые будут проверять существует ли на самом деле файл (css или картинка) и директория - если да, то правило работать не будет (Я добавил правила, которые будут дописывать www). Вот держи:

RewriteEngine On
RewriteBase /
DirectoryIndex index.php
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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



Потом, когда уже станешь Тру Кодером, почитай пость Духовности. Удачи)
 

turrel

Новичок
Подскажите как на сайте сделать постоянные ссылки на статьи из базы данных
т.е. сейчас я обращаюсь к страничке так http://MySite.Ru/production.php?title=prod1
http://MySite.Ru/production.php?title=prod1 - а это чем не постоянная ссылка? =)
Поисковики ее также проиндексируют, как и любую другую (при прочих равных...)
То есть для чего всего это? Если хочешь красивые url, тогда можно через ЧПУ сразу делать http://MySite.Ru/takoy_to_zagolovok
 
Сверху