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

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

Автор: Kerl07
Дата сообщения: 16.06.2007 18:35
Всем доброе время суток.
Аналогичные задачи здесь уже поднимались, но мне не удалось побороть до конца в моем случае. Изучение мануалов, примеров и т.д. не увенчались успехом. Подскажите, гуру, в чем моя ошибка.
Задача: ссылки вида http://username.site.ru/mydata/ преобразовать к виду http://site.ru/users/username/mydata/
В .htaccess для этого прописал:

Options +FollowSymlinks

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*)\.site\.ru(.*) [NC]
RewriteCond %{HTTP_HOST} !^www\.site\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/users
RewriteRule ^(.*) %{HTTP_HOST}$1
RewriteRule ^(.*)\.site\.ru(.*) /users/$1$2

При этом ссылки вида http://username.site.ru обрабатываются нормально (вызывается http://site.ru/users/username/), а вида http://username.site.ru/mydata/ приводит к ошибке 404. Перепробовал множество различных вариантов, но решения так и не нашел... Заранее благодарен.
Автор: afiget
Дата сообщения: 26.06.2007 19:10
Я чего то торможу. Не могу решить проблему с добавлением суффикса. Подскажите, пожалуйста.
Есть

RewriteEngine On
Options +FollowSymlinks
RewriteRule ^news/([0-9])+[/]{0,1}$ news.php?id=$1 [L]

которое должно вызвать файл news.php и передать ему соответсвующий параметр.
news.php лежит в корне сайта.
При обработке mod_rewrite первым делом дописывает к news суффикс .php и пытается применить правило к строке "news.php/15"
Естественно, ничего не выходит.

Как запретить добавление суффикса?
Пока обошел тем, что поменял имя файла на shownews.php, но хочется решить проблему.
Автор: SergeyLarionov
Дата сообщения: 27.06.2007 06:40
всем привет.
я попытался сделать файлик, который все адреса типа user.net.lan переводил бы в net.lan/~user незаметно для пользователей.
Хоть эта тема много раз поднималась и я делаю (вроде) точно так же, но все равно не получается =((

вот .htaccess:

Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^[^\w_-]+\.net\.lan$
RewriteRule ^([\w_-]+) %{HTTP_HOST}/$1
RewriteRule ^([\w_-]+)\.net\.lan(.*)$ ~$1$2
Автор: driverok
Дата сообщения: 04.07.2007 17:42
Привет!
Нужна помощь. Вот ссылка

Цитата:
http://parser/id/5884/page/6.html

как из нее сделать

Цитата:
http://parser/index.php?id=5884&page=6?

вот код моего .htaccess

Код: RewriteRule ^(.*)id/(.*).html$ $1index.php?id=$2
RewriteRule ^(.*)bookid/(.*).html$ $1index.php?bookid=$2
RewriteRule ^(.*)series/(.*).html$ $1index.php?series=$2
RewriteRule ^(.*)page/(.*).html$ $1index.php?page=$2
Автор: driverok
Дата сообщения: 05.07.2007 09:51
добавил в .htaccess

Код:
RewriteRule ^(.*)id/(.*)/page/(.*).html$ $1index.php?id=$2&page=$3
Автор: dacuan
Дата сообщения: 05.07.2007 18:09
SergeyLarionov
Попробуй так (не проверял):

Код:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{HTTP_HOST} ^([\w_-]+)\.net\.lan$
RewriteRule ^(.*)$ ~%1/$1
Автор: driverok
Дата сообщения: 05.07.2007 21:59
dacuan
спасибо, работает.
есть еще вопрос
на сайте ссылки отбражаються - http://parser/id/8108.html - а при переходе по ней в строке адреса - http://parser/index.php?id=8108

?
почему?
вот .htaccess

Код:
RewriteEngine on
RewriteRule ^.htaccess$ - [F]
Options +FollowSymlinks

RewriteRule ^bookid/([0-9]+)/view/print\.html$ /index.php?bookid=$1&view=print
RewriteRule ^([a-z]+)/(-?[0-9]+)\.html$ http://parser/index.php?$1=$2
RewriteRule ^([a-z]+)/(-?[0-9]+)/page/([0-9]+)\.html$ http://parser/index.php?$1=$2&page=$3

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule images/([0-9]+)\.jpg$ convert.php?id=$1 [L]
Автор: dacuan
Дата сообщения: 06.07.2007 09:29
driverok
Стоп, parser -- это имя хоста?!!!!!
Автор: Ludovick
Дата сообщения: 06.07.2007 10:00
Добрый день господа,
извините, я тут со своей придумкой вылезаю.

на нашем сайте есть необходимость людям, которые идут на главную страницу с внутренних показывать не главную страницу, а некий усечённый аналог.

для этого я пытаюсь написать что-то вроде

RewriteCond %{HTTP_REFERER} http://www.site.ru/
RewriteRule ^/index.php$ /index2.php [L]


но почему-то не работает, хотя синтаксис верный.


помогите, в чём трабла ?
Автор: dacuan
Дата сообщения: 06.07.2007 10:09
Ludovick
А логи что пишут?
Автор: Dillz
Дата сообщения: 07.07.2007 13:34
Добрый день.
У меня схожая проблема. Задача почти идентичная: пользователи, пришедшие с определенного урла должные редиректиться на картинку вместо index.php
Почему-то ничего не происходит.

Добавлено:
RewriteEngine on
RewriteCond %{REMOTE_HOST} ^badsite.ru.*
RewriteRule ^/$ /you-suck.htm [L]
Вот такая конструкция не работает. Не могли бы подсказать, что не так? В логах ошибок нет, просто не срабатывает.
Автор: Caslix
Дата сообщения: 11.07.2007 10:41
Возникла такая задача: ранее у меня была админка с урлами вида:
http://www.domen.ru/?module=publications&id=12 Сейчас я перешел на другую админку, где урл этой же страницы имеет вид:
http://www.domen.ru/articles/article1.html

Мне необходимо сделать 301 редирект, например, со страницы http://www.domen.ru/?module=publications&id=12 на http://www.domen.ru/articles/article1.html

Сейчас по урлу http://www.domen.ru/?module=publications&id=12 выдается главная.

Помогите, пожалуйста!
Автор: Cheery
Дата сообщения: 12.07.2007 04:37
Dillz

Цитата:
RewriteCond %{REMOTE_HOST} ^badsite.ru.*

а точнее? как точно запись выглядит?

Caslix

Цитата:
Мне необходимо сделать 301 редирект, например, со страницы http://www.domen.ru/?module=publications&id=12 на http://www.domen.ru/articles/article1.html

я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет
Автор: Caslix
Дата сообщения: 12.07.2007 08:37

Цитата:
я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет


Расскажите, пожалуйста, по подробнее...

Добавлено:

Цитата:
я не вижу связи.. если у вас связь адреса статьи с ее id в таблице, то анализируйте скриптом и перекидывайте на нужный url.. mod_rewrite тут не поможет



Возможно такое решение?

<?
$ref=$_SERVER['REQUEST_URI'];
if ($ref='/?module=publications&id=12/')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.domen.ru/articles/article1.html');
exit();
}
?>

Насколько правильно не знаю
Автор: Dillz
Дата сообщения: 12.07.2007 11:35
Cheery,
вот так запись и выглядит:
RewriteEngine on
RewriteCond %{REMOTE_HOST} ^badsite.ru.*
RewriteRule ^/$ /you-suck.htm [L]
Или у меня в синтаксисе ошибки есть?
Задача не допустить на свой сайт людей, приходящих с одного сайта (здесь: badsite.ru), так чтобы они вместо титульной страницы редиректились на страницу you-suck.htm находящуюся в корне сайта.
Автор: Cheery
Дата сообщения: 13.07.2007 01:18
Caslix

Цитата:
Расскажите, пожалуйста, по подробнее...

подробнее что?
еще раз.. как понять, что для id=12 нужно запрашивать article1.html?
или это только один такой линк?


Цитата:
Возможно такое решение?

это уже php
да, возможно, но не в таком виде как

Цитата:
if ($ref='/?module=publications&id=12/')

для чего тут / плюс в условии пишется ==
но это все равно не относится к данной теме

Dillz

Цитата:
вот так запись и выглядит:


Цитата:
RewriteCond %{REMOTE_HOST} ^badsite.ru.*

RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
Автор: Caslix
Дата сообщения: 13.07.2007 09:08

Цитата:
подробнее что?
еще раз.. как понять, что для id=12 нужно запрашивать article1.html?
или это только один такой линк?


Мне необходимо сделать редиректы для поисковой системы со старых страниц на новые. Я перешел на другую CMS, поэтому связи старых урлов уже нет. Это все равно что к любому домену добавить ?module=publications&id=12 и выдваться будет главная.

Какое может быть решение в таком случае, время поджимает, т. к. сайт уже на новых урлах и редиректы нужны сейчас.

Добавлено:
Проблема решена ))) таким образом (вставляется в файл index.php):

<?
$url=$_SERVER['REQUEST_URI'];
if ($url=='/?module=custompage&id=820')
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.site.ru/vakan/');
exit();
}
else if ($url=='/?module=custompage&id=1111)
{
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.site.ru/order/');
exit();
}
?>

Спасибо Cheery, натолкнул на правильное действие )

Осталось сделать редирект со всех страниц вида http://www.site.ru/?efasdfasdfasdf на главную, чтобы небыло одинаковых страниц... Если есть варианты, поделитесь, пожалуйста
Автор: Dillz
Дата сообщения: 13.07.2007 13:48
Cheery,
спасибо за помощь, но эта конструкция RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
почему-то нужного редиректа не вызывает.
Чего-то непонятное, бьюсь уже долго, эффекта нет.
Автор: Cheery
Дата сообщения: 13.07.2007 20:26
Dillz

Цитата:
Чего-то непонятное, бьюсь уже долго, эффекта нет.

включаем логирование и смотрим как и что обрабатывается
эта конструкция должна отсекать переходы с реферами

Caslix

Цитата:
Проблема решена

это глупое решение.. пара лишних символов в строке или другой порядок и все.. не сработает


Цитата:
Осталось сделать редирект со всех страниц вид

запрос вида /?fgfgfg и так запрашивает главную страницу.
все, что после знака вопроса - аргументы запросы.. передаются той страницы, что идет до ?
а до него идет главная страница по умолчанию
Автор: Dillz
Дата сообщения: 13.07.2007 21:42
Cheery, похоже это какой-то баг mod_rewrite применительно к Wordpress. Там выходит двойная конструкция (одна исходная, вторая - то, что пытаюсь сделать) упорно не вызывающая нужного эффекта.
"Смотреть логирование" - имеется в виду ошибки? Так их и нет в логе. Чертовщина.
Автор: Cheery
Дата сообщения: 13.07.2007 21:53
Dillz

Цитата:
"Смотреть логирование" - имеется в виду ошибки?

включить на время rewritelog и просмотреть его.
Автор: Dillz
Дата сообщения: 14.07.2007 20:23
Cheery, его только хостер может включить?
Я написал в тех. поддержку, получил такой ответ:
SetEnvIfNoCase Referer "^http://badsite.ru" out=1
SetEnvIfNoCase Referer "^http://badsite2.ru" out=1
Order Allow,Deny
Deny from env=out
Allow from all
Что это за конструкция такая? И она, насколько я понимаю, просто запрещает доступ с определенных урлов, а никаким редиректом и не пахнет. Так?
Автор: Cheery
Дата сообщения: 14.07.2007 20:26
Dillz

Цитата:
И она, насколько я понимаю, просто запрещает доступ с определенных урлов, а никаким редиректом и не пахнет. Так?

да
Автор: Dillz
Дата сообщения: 14.07.2007 22:31
Cheery, извиняюсь за очередное беспокойство. А такая вот конструкция имеет смысл?

SetEnvIf REMOTE_HOST badsite.ru REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html
Автор: Cheery
Дата сообщения: 14.07.2007 22:59
Dillz

Цитата:
А такая вот конструкция имеет смысл?

попробуй - узнаешь.
но сдается мне, что ты просто тут что то не так написал

Цитата:
спасибо за помощь, но эта конструкция RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
почему-то нужного редиректа не вызывает.



возможно надо экранировать точки в названии сайта.. иначе это будет частью регулярного выражения
badsite\.ru
Автор: Dillz
Дата сообщения: 15.07.2007 00:42
Проверил все варианты, даже вариант тех. поддержки с банальным запретом не работает Экранирование, кстати, тоже не меняет ситуацию.
Автор: Cheery
Дата сообщения: 15.07.2007 00:44
Dillz
надоел флейм.. сейчас у себя протестирую

Добавлено:

Код: RewriteEngine On
RewriteCond %{REQUEST_URI} !^/only_for_you.html
RewriteCond %{HTTP_REFERER} ^http://badsite.ru/.*$
RewriteRule ^.*$ /only_for_you.html [R]
Автор: Charodei
Дата сообщения: 15.07.2007 13:01
Решил завести себе блог.
Выбрал движок b2evolution http://b2evolution.net/
И вот возникли проблемы с url.
Писал свой вопрос у них на форуме сайта, в ответ ничего, одна тишина ...
Может это и нельзя осуществить?
В админке сайта написано, что можно задать свой урл с помощью какой-то заглушки или mod_rewrite.
Вот поэтому я и здесь, думаю наверное можно изменить.

Что мне нужно прописать в .htaccess?

Есть ссылки:
http://test.ru/index.php/2007/07/10/test1
or
http://test.ru/index.php/2007/07/10/1232

Если ссылки открывать без прописывания там index.php, то они не открываются.

Хочу, чтобы было по человечески:
http://test.ru/2007/07/10/test1
http://test.ru/2007/07/10/1232
Автор: iltmpz
Дата сообщения: 16.07.2007 15:53
Начинаю разбираться с mod_rewrite, возникли вопросы:
1. Почему-то на все попытки использования директив: RewriteLog, RewriteMap он выдает Internal Server Error.
Что с этим делать? Может быть, надо что-нибудь включить?

2. Написал в .htaccess правила:

Код:
RewriteRule ^(.*)a(.*)$ $1A$2
RewriteRule ^(.*)b(.*)$ $1B$2
RewriteRule ^(.*)c(.*)$ $1C$2
RewriteRule ^(.*).aspx$ /testphp/phpinfo.php?$1
Автор: Cheery
Дата сообщения: 16.07.2007 16:41
iltmpz

Цитата:
Почему-то на все попытки использования директив: RewriteLog, RewriteMap он выдает Internal Server Error

читать error_log..
вполне возможно, что не подключен mod_rewrite модуль

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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