Ru-Board.club
← Вернуться в раздел «Web-программирование»

» mod_rewrite: документация, готовые решения, вопросы

Автор: schalke
Дата сообщения: 12.04.2008 09:02
То есть:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule (.*) http://www.domain.ru/$1 [L]
</IfModule>
а в базе храним что то типа этого
www.domain.ru/indexd.php?id=1 >=< www.domain.ru/vsem_privet.html

скрипт обработчик тогда тоже index.php?
тогда так
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
?
в нем перехватываем REQUEST_URI и делаем выборку по базе,затем с помощью include
подключаем нужное?

Не проще ли тогда хранить в базе так:
1 >=< vsem_privet.html

просто с такой задачей сталкиваюсь впервые,а в интернете информации такои мало
Автор: Tstf
Дата сообщения: 12.04.2008 18:06
Почему по ссылке

_http://www.fmnokia.net/files/alpha/О я как бы ищу не по русской букве ? Как заставить чтобы искало по русской? Т.е.

Код примерно такой


Код:
// Алфавит
$acess_alpha = $filesConfig['alpha'];
if($acess_alpha == 1)
{
    $tpl->load_template($custom_template.''.$modulname.'/alfavit.tpl');

    $words = $filesConfig['alpha_word']; // подгуржаем строку с буквами (a,b,c,.... а,б,в,...)
    $alpha_stroks = explode(',',$filesConfig['alpha_stroks']);
    $alpha_array = explode(',',$words);
    $alpha_stroks_count = count($alpha_stroks)-1;
    $alpha_count = count($alpha_array)-1;
    for($j = 0; $j <= $alpha_count; $j++)
    {
        for($k = 0; $k <= $alpha_stroks_count; $k++)
        {
        if($j == $alpha_stroks[$k])
        $alpha .= "<br /><br />";
        }
        if($alpha_array[$j] != $_REQUEST['word'])
        {
        if ($config['allow_alt_url'] == "yes")
            $alpha .= "<a href=\"".$config['http_home_url']."".$modulname."/alpha/".$alpha_array[$j]."\">".$alpha_array[$j]."</a> ";
        else
            $alpha .= "<a href=\"".$config['http_home_url']."index.php?do=".$modulname."&amp;op=alpha&amp;word=".$alpha_array[$j]."\">".$alpha_array[$j]."</a> ";
        }
        else
        $alpha .= "<span>".$alpha_array[$j]."</span> ";
    }
    $tpl->set('{alpha}', $alpha);
    $tpl->compile('content');
}
// END Алфавит
Автор: Sebismil
Дата сообщения: 09.05.2008 19:15
Подскажите пжлст, как переписать URL с www.sitename.ru/forum/index.php на www.sitename.ru/smfforum/index.php. Форум крутится внутри ЦМС Друпал. Если ссылку из форума по правой кнопке открыть в новом окне, то ссылка преобразовывается в www.sitename.ru/forum/index.php и открывается просто форум, без оболочки сайта на друпале (если в url заменить forum на smfforum, то открывается эта же страница форума, но внутри друпала). Спасибо всем ответившим!
Автор: Cheery
Дата сообщения: 09.05.2008 19:19
Tstf

Цитата:
Как заставить чтобы искало по русской?

www.php.net/urldecode
Автор: Kobaltr
Дата сообщения: 13.05.2008 11:26
день добрый
помогите плиз в решении задачи
есть партнерская программа с линками для афилейтов вида
http://domain.com/?id=xxx
В существующем виде распыляется SEO рейтинг по многочисленным партнерским ссылкам
Задача склеить для поисковиков все входящие линки
Необходимо посредством htaccess реализовать 301 редирект на http://domain.com/
при этом не потеряв код афилейта id=xxx
Возможно ли это?
Автор: PEDKA
Дата сообщения: 13.05.2008 23:08
Kobaltr

Цитата:
Необходимо посредством htaccess реализовать 301 редирект на http://domain.com/

301 редирект со ссылок?

Самый простой способ следующий: генерировать ссылки вида ваш_сайт.ру/?exit=base64_encode(http://domain.com/?id=xxx). А в index.php прописать, что если существует переменная exit, передаваемая методом GET, то редиректить браузер на страницу base64_decode($_GET['exit']).
Автор: Kobaltr
Дата сообщения: 15.05.2008 12:59
вы не совсем поняли
я делаю редирект ссылок вида

http://domain.com?id=777
следующим htaccess


Код: RewriteEngine On

RewriteBase /

RewriteCond %{QUERY_STRING} ^id=([0-9]+)(.*)$

RewriteRule ^index.php /? [R=301,L]
Автор: Cheery
Дата сообщения: 15.05.2008 19:27
Kobaltr

Цитата:
вы не совсем поняли
я делаю редирект ссылок вида

зачем?? если у вас есть index.php и указано, что это индексный файл, то даже htaccess не нужен

вообще не понимаю смысла преобразований выше.. если уж делать, то и передавать и id

Цитата:
RewriteRule ^index.php /? [R=301,L]

вот тут.. но, как и сказал, это вообще не нужно делать. если index.php файл открываемый по умолчанию, то и ссылки указаного вида будут открывать сразу его.
Автор: Kobaltr
Дата сообщения: 15.05.2008 19:58
цель- оптимизация для SEO
динамические ссылки
index.php?id=775
index.php?id=776
index.php?id=777
index.php?id=778
разумеется все ведут на index.php
но каждая из них воспринимается поисковиком как линк ведущий на отдельную страницу, что распыляет суммарный вес index.php для поисковиков

Автор: Cheery
Дата сообщения: 15.05.2008 20:01
Kobaltr

Цитата:
но каждая из них воспринимается поисковиком как линк ведущий на отдельную страницу, что распыляет суммарный вес index.php для поисковиков

еще раз.. перечитайте медленно, пока не дойдет.
ВСЕ ссылки вида
Цитата:
http://domain.com/?id=777

по умолчанию уже идут на index.php
вас никто не заставляет писать именно
http://domain.com/index.php?id=777
Автор: Kobaltr
Дата сообщения: 15.05.2008 21:17
еще раз
читать не менее внимательно
забудьте про index.php
http://domain.com/?id=777
http://domain.com/?id=778
для google - эти две ссылки ведут на разные сайты
при помощи 301 редиректа я могу их склеить
что не понятно?
Автор: Cheery
Дата сообщения: 15.05.2008 21:23

Цитата:
что не понятно?

зачем вам htaccess с mod_rewrite?
Автор: crimea360
Дата сообщения: 29.05.2008 15:03
Привет.

вот эти 3 типа динамических страниц
http://www.domen.com/index1.php?id=7
http://www.domen.com/category.php?id=59
http://www.domen.com/category.php?id=2&offset=130&sort=1&order=1
а статику для них соответственно хотелось бы видеть в таком виде:

http://www.domen.com/index-1-7.htm
http://www.domen.com/category-59.htm
http://www.domen.com/category-2-130-1-1.htm

Этого я добился написав такие правила

RewriteRule ^category-([^-]*)-([^-]*)-([^-]*)-([^-]*)\.htm$ /category.php?id=$1&offset=$2&sort=$3&order=$4 [L]
RewriteRule ^category-([^-]*)\.htm$ /category.php?id=$1 [L]
RewriteRule ^index-1-([^-]*)\.htm$ /index1.php?id=$1 [L]


Теперь не могу придумать как сделать так чтобы когда заходишь по старым ссылкам
http://www.domen.com/index1.php?id=7
они автоматически редиректились
http://www.domen.com/index-1-7.htm

Попробовал вот так

RewriteCond %{REQUEST_URI} ^/index1.php
RewriteCond %{QUERY_STRING} ^id=([^/]*)
RewriteRule ^$ index-1-%1.htm? [L,R=301]

Но не работает -(((



Может кто подскажет?
Автор: Cheery
Дата сообщения: 29.05.2008 19:54
crimea360

Цитата:
Может кто подскажет?

в index.php смотрим - если есть $_SERVER["REDIRECT_URL"], то значит произошел переход через mod_rewrite
если нету - перекидываешь куда хочешь
Автор: crimea360
Дата сообщения: 30.05.2008 10:24
Не понял причем сдесь index.php, он вызывается только когда человек заходит на главную и в редиректе вообще не участвует

Необходимо чтобы
http://www.domen.com/index1.php?id=7
автоматически редиректились
http://www.domen.com/index-1-7.htm

И необходимо это сделать в файле .htaccess
Автор: Cheery
Дата сообщения: 30.05.2008 17:19
crimea360

Цитата:
Не понял причем сдесь index.php

блин.. ну в ссылке он же есть?

Цитата:
http://www.domen.com/index1.php?id=7



Цитата:
И необходимо это сделать в файле .htaccess

зачем так извращаться???
вы же все равно хотите, чтобы переадресация шла явным образом через 302 или 301

в php вы это сделаете двумя строчками.

ну хотите по своему.. так делайте
Под это не подойдет ни один ресурс

Цитата:
RewriteRule ^$ index-1-%1.htm? [L,R=301]

RewriteRule ^.*$ index-1-%1.htm?
Автор: ASE_DAG
Дата сообщения: 31.05.2008 21:32
Извините, если обсуждалось, не нашел.
Ситуация:
Есть Seditio CMS, заточенная под работу с одним уровнем вложенности. Все ссылки типа "plug.php?e=search" или "skins/skin/skin.css", т.е. без начального "/".
Соответственно ссылки со страниц вроде "/archive/news" работать не будут. Первое, что приходит в голову:RewriteBase /
RewriteRule ^/{0}(.*)$ $1
Автор: PEDKA
Дата сообщения: 01.06.2008 10:19
ASE_DAG
Попробуй поставить в <head> до подключения стилей:

Код: <base href="[SITE_URL]" />
Автор: ASE_DAG
Дата сообщения: 01.06.2008 17:40
PEDKA
Спасибо, заработало! Помогло даже там, где начальный слеш уже есть. Буду теперь знать. На AlphaImageLoader это, правда не влияет, пришлось прописывать вручную.
Автор: j0
Дата сообщения: 04.06.2008 10:49
Добрый день. Нужно создать правило такого вида:
чтобы news.php?action=add заменялось на news/add/. Нашел вот такой пример:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule news/([^/]+)? news.php?action=$1 [L]
Все прекрасно заменяется, но пропадают все картинки и отваливаются стили. Подскажите как исправить.
Как вариант можно использовать <base>, но не очень охото править файлы при переносе с локалхоста.
Заранее благодарен.
Автор: PEDKA
Дата сообщения: 04.06.2008 10:59
j0

Цитата:
пропадают все картинки и отваливаются стили

Либо ставить base href (см. на два поста выше), либо у всех ссылок, картинок и стилей в самом начале пути ставить «/».
Автор: Apart
Дата сообщения: 10.06.2008 00:53
Нужно, чтобы когда при обращении к сайту получаем Error 404 (File Not Found), то показывалась какая-нибудь страница (без редиректа).

Такой вариант не работает

ErrorDocument 404 /errorpage.html


Такой вариант работает, но при этом осуществляется редирект на http://www.mydomain.ru/errorpage.html

ErrorDocument 404 http://www.mydomain.ru/errorpage.html


Также я пробовал разные варианты через RewriteRule, например,

RewriteRule ^(*.)$ errorpage.html [L,R=404]

но они или не работают (500 Error), или пишут "RewriteRule: invalid HTTP response code for flag 'R'"


Проблема в том, что если на одной папке есть два-три домена (.mydomain.ru, .mydomain2.ru, .mydomain3.ru), то не очень хорошо, если будет осуществляться редирект на один из них - http://www.mydomain.ru/errorpage.html
Нужно просто, чтобы показывался errorpage.html для любого домена на этой папке. Как это сделать?
Автор: Cheery
Дата сообщения: 10.06.2008 01:07
Apart

Цитата:
Также я пробовал разные варианты через RewriteRule, например,

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /errorpage.html
или же
Нестандартные страницы ошибок (404, 401 и др.)
Автор: Apart
Дата сообщения: 10.06.2008 02:09
Cheery, судя по всему дело в настроках Apache или как еще это объяснить? Работает только вариант с абсолютным указанием адреса ErrorPage

Не прокатывает даже указание полного относительного пути к файлу (в том же AuthUserFile он нормально работает)

Если указать

/user/www/errorpage.html, то errorpage.html не подгружается, а в логах
[Tue Jun 10 02:57:00 2008] [error] [client 213.85.167.80] File does not exist: /user/www/page.html

А если указать без слеша
user/www/errorpage.html, то в логах

[Tue Jun 10 02:50:05 2008] [error] [client 213.85.167.80] Invalid error redirection directive: user/www/errorpage.html

Если только попробовать там Perl-скрипт указать, но, наверное, на него тоже будет редиректиться..
Автор: Cheery
Дата сообщения: 10.06.2008 02:17
Apart

Цитата:
File does not exist: /user/www/page.html

вроде указывается другой файл

насколько понимаю - файлы должны быть в пределах директорий, доступных через браузер
настройки того же апача делают алиас для папки с error файлами
Автор: Apart
Дата сообщения: 10.06.2008 02:23
Да, вот еще вывод на HTML-странице:

Not Found
The requested URL /page.html was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


Но ведь относительный адрес указан правильно, файл errorpage.html существует, а в логах по его поводу чисто в этом случае, только есть надпись про File does not exist: /user/www/page.html


Добавлено:

Цитата:
File does not exist: /user/www/page.html

вроде указывается другой файл

насколько понимаю - файлы должны быть в пределах директорий, доступных через браузер
настройки того же апача делают алиас для папки с error файлами


У меня errorpage.html находится в той же папке, что и index.html

Возможно, дело в том, что написано в htaccess ранее?

А там есть надпись вида:
RewriteCond %{HTTP_HOST} (www\.)?([a-z0-9-]+)\.info [NC]
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^(www\.)?([a-z0-9-]+)\.info(.*) $2page.html [L,QSA]

$2page.html - это и есть запросы к page.html в примере выше, которые зависят от адреса домена (я упростил, чтобы не писать на форуме $2-page.html).

Автор: Cheery
Дата сообщения: 10.06.2008 02:32
Apart

Цитата:
Возможно, дело в том, что написано в htaccess ранее?

включите логирование действий mod_rewrite на время и проанализируйте процесс обработки
Автор: TBFG
Дата сообщения: 11.06.2008 16:47
Читал, читал, так ничего и не понял .

Помогите, пожалуйста.

Есть УРЛ вида:

а)http://site.com/?type=spb_hotels&id=89
б)http://site.com/?type=spb_hotels

Надо что бы юзер в строке браузер видел, соответственно

а)http://site.com/spb_hotels/89/
б)http://site.com/spb_hotels/
Автор: andead
Дата сообщения: 11.06.2008 21:22
TBFG

Код: RewriteEngine On
RewriteRule ^spb_hotels$ /spb_hotels/ [R=301,L]
RewriteRule ^spb_hotels/$ /?type=spb_hotels [L]
RewriteRule ^spb_hotels/([0-9]+)$ /spb_hotels/$1/ [R=301,L]
RewriteRule ^spb_hotels/([0-9]+)/$ /?type=spb_hotels&id=$1 [L]
Автор: jkrus
Дата сообщения: 13.06.2008 01:12
Люди, помогите! Никак не могу допереть, как преобразовать запрос вида user_name.site.ru в site.ru/blog/user_name/
Только user_name не директория, а формируется с помощью ЧПУ. Запрос без ЧПУ выглядит так: http://site.ru/blog/index.php?page=blog&blog=user_name
Помогите, очень надо.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.