Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > mod_rewrite


Автор: APro 1.9.2008, 12:07
Вобщем прочитал я несколько статей и ничего не выходит. Вы не могли бы написать пример (так я лучше пойму). Вот сайт:

http://localhost/index.php?module=xxx 

Как мне сделать ссылку типа:

http://localhost/module/xxx

???

Заранее спасибо!

Автор: skyboy 1.9.2008, 12:23
на этом форуме http://forum.vingrad.ru/forum/topic-52881.html читал?

Автор: APro 1.9.2008, 13:15
именно на ней я и закончил. Это есдинственная статья, для таких, не совсем опытных, как я. Но даже в не я ничего не понял. Кто-нибудь может реально помочь? На практике? А не посылать на другие темы и т.д. (всё равно я их читал, если прочитаю ещё раз, ума не прибавиться). Я прочитал, но не до конца понял. А чтобы понять, мне нужен пример для моего случая. Если кто может --- помогите! plz 

Автор: Nigel 1.9.2008, 18:08
Если ххх - это слово какое-то, к примеру, то будет
Код

RewriteRule ^module/(\w+)$    index.php?module=$1

Все же прочитайте статью еще раз, если на таких мелочах спотыкаетесь. Не поможет, берите другую статью

Автор: Gold Dragon 2.9.2008, 10:19
кстати, прочитал тоже очень много на форуме, но так и не понял  smile НО... вот что я сделал у себя и меня это устраивает полностью сейчас. 

надеюсь по теме вопроса.. в общем так....

сделал файл
.htaccess
Код

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA] 
  

потом с основном файле, а именно index.php делаю
Код

// получаю адрес 
$url = explode ( '/', $_SERVER ['REQUEST_URI'] );

// проверяю есть ли у меня какая-либо ссылка типа
// www.site.ru/news
// www.site.ru/searh
$pages = (isset ( $url [1] )) ? $url [1] : '';
// в $url[1] как раз содержит news или search
// это получается что и, например, www.site.ru/index.php?pages=news

// потом я перехожу туда куда мне нужно
switch ( $pages) {
    //*********************************************************************
    case 'search' : // делаем что-то если www.site.ru/search

        $content = 'Поиск';
    break;
    //*********************************************************************
    case 'news' : // делаем что-то если www.site.ru/news
        $content = 'Новости';
    break;
    //*********************************************************************
    case 'qqq' : // делаем что-то если www.site.ru/qqq
                        // тут получаем ещё один параметр, например
                        // www.site.ru/qqq/12
        $url2 = (isset ( $url [2] )) ? $url [2]  : '';
        if ($url2 == 11) {
            $content = 'qqq=11';
                        }elseif($url2 == 22){
                                    $content = 'qqq=22'; 
        } else {
            $content = 'qqq false';
        }
    break;
    //*********************************************************************
    default : // главная страница или любая если адрес не правильный
        $content = 'Главная';
}

echo $content;


теперь на сайте нужно определиться с параметрами и правильно писать адреса
вот например есть
Код

www.site.ru/index.php?pages=news&day=23&id=123

и получается что нужно писать адрес
Код

www.site.ru/news/23/123

и соответственно будет
$url[1] = news
$url[2] = 23
$url[3] = 123

может конечно это не самый оптимальный и лучший вариант, но мне он понравился smile

Автор: -=Ustas=- 2.9.2008, 11:08
Цитата(Gold Dragon @  2.9.2008,  10:19 Найти цитируемый пост)
может конечно это не самый оптимальный и лучший вариант, но мне он понравился smile


Ну почему же, по крайней мере это гораздо оптимальнее (в плане громоздкости и модификации), чем если бы выстраивать длинные списки жестких урлов непосредственно в .htaccess.

Автор: stalkerok 2.9.2008, 19:39
Прочитал ФАК, пользовался поиском но так и не нашёл как с помощью .htaccess сделать ЧПУ и не перенаправить изображения

.htaccess
Код

Options +FollowSymLinks

Options -Indexes

RewriteEngine on

RewriteCond %{REQUEST_URI} !(styles|js|images)\/

RewriteRule ^([^/]*)/([^/]*)/*$ /index.php?page=$1&id=$2
 
при запросе вида 
Код
http://localhost/news/
 
адрес изображения становится 
Код
http://localhost/news/images/img.gif
 
а должен быть
Код
http://localhost/images/img.gif
 

почему так ведь стоит
Код
RewriteCond %{REQUEST_URI} !(styles|js|images)\/
 ?

P.S.также не получается вариант предложенный выше, изображения всё равно перенаправляются

заранее спасибо!

Автор: -=Ustas=- 2.9.2008, 20:00
Цитата(stalkerok @  2.9.2008,  19:39 Найти цитируемый пост)
P.S.также не получается вариант предложенный выше, изображения всё равно перенаправляются

Вставь в мету
Код

<BASE href="http://domain.ru" />

Автор: Gold Dragon 3.9.2008, 09:58
у меня в конфигурации есть адрес сайта и физический адрес и везде по сайты используются только эти переменные.. Такой проблемы не было.. 

Но ещё я делаю запрет прямого вызоно всего что возможно кроме index.php smile

Автор: skyboy 3.9.2008, 13:18
т.е. ты хочешь, чтоб по запросу "/images/img.gif" на странице "http://localhost/news/" получать картинку "http://localhost/images/img.gif"?
Цитата(-=Ustas=- @  2.9.2008,  19:00 Найти цитируемый пост)
Вставь в мету
<BASE href="http://domain.ru" />

это чтоб не работали ссылки с относительным URI?

Автор: -=Ustas=- 3.9.2008, 14:21
Цитата(skyboy @  3.9.2008,  13:18 Найти цитируемый пост)
это чтоб не работали ссылки с относительным URI? 

Вообще-то в верстке правильнее делать ссылки вида /images/img.gif.

Добавлено через 27 секунд
ИМХО разумеется.

Автор: skyboy 4.9.2008, 00:44
Цитата(Akella @  3.9.2008,  22:00 Найти цитируемый пост)
НЕ работают

В СМЫСЛЕ - "не работают"? не происхходит преобразование адреса и происходит переход на другой url(какой?)? возникает ошибка(какая?)? в rewrite.log отображено, что производятся не те преобразования? что?!

Автор: Akella 4.9.2008, 09:34
Цитата(skyboy @  4.9.2008,  00:44 Найти цитируемый пост)
В СМЫСЛЕ - "не работают"? 


Цитата(Akella @  3.9.2008,  23:00 Найти цитируемый пост)
Not Found

The requested URL /kvx2007.html was not found on this server.
Apache Server at www.ra-codecraft.com.ua Port 80

вот так не работают

Добавлено через 9 минут и 26 секунд
Цитата(skyboy @  4.9.2008,  00:44 Найти цитируемый пост)
в rewrite.log отображено, что производятся не те преобразования?

у меня разве есть к нему доступ?

Автор: -=Ustas=- 4.9.2008, 10:23
А попробуй создать там простенький .htaccess, например:
Код

Options -Indexes
Options +FollowSymlinks

RewriteEngine on

RewriteRule ^(.*)$ index.php?param=$1 [L,QSA]


ну и index.php, в котором выведи _GET['param']. Какие результаты будут?

Автор: Akella 4.9.2008, 11:00
Цитата(-=Ustas=- @  4.9.2008,  10:23 Найти цитируемый пост)
ну и index.php, в котором выведи _GET['param']. Какие результаты будут? 

можно поточнее?  smile

Добавлено через 1 минуту и 19 секунд
сайт рабочий, я не смогу (сейчас по крайней мере) заменять содержимое index.php

Добавлено через 5 минут и 20 секунд
Потихоньку читаю тему в FAQ про mod_rewrite, хотя тот мой .htaccess, так сказать, стандартный, из дистриба джумлы.

Автор: Nigel 6.9.2008, 12:25
Akella, я честно, не понимаю, зачему нужны строки 64-65, если есть 62-я. А так... файлик хтацес корректный. И потом, какая все же ссылка
http://www.ra-codecraft.com.ua/kvx2007.html или  http://www.ra-codecraft.com.ua/index.php/kvx2007.html у вас не работает при включенном и выключенном мод реврайте?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)