Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Опять же mod_rewrite и .htaccess

1.9K
24 февраля 2006 года
Andius
61 / / 04.01.2004
Здравствуйте. :)

У меня есть два очень важных(по крайней мере я так думаю) вопроса к вам :)

1. Несколько дней назад я уже задавал подобный вопрос на вашем форуме и получил хороший и понятный ответ от камрада Carpus'a, но, к сожалению, не все работает так, как хотелось бы. :)

Итак, мне необходимо с помощью mod_rewrite переделать ссылку /viewpost.php?id=31 в /post/31
то есть чтобы, когда пользователь заходит по ссылке /post/31 выполнялся скрипт /viewpost.php?id=31 . Достаточно распространенная проблема.

Я поступил так(по совету Carpus'a):

Вписал в .htaccess следующее:

Options -Indexes
Options +FollowSymLinks

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} /post/(.*)$
RewriteRule ^(.*)[\/post\/](.*)$ viewpost.php?id=$2 [L]


Возникли проблемы.

1. Если в строке написать http://localhost/lubajaerunda/post/31 ,
то выполнится все тот же скрипт
http://localhost/post/31 .

2. Если в строке написать http://localhost/post (без слеша на конце), то сервер выдаст, что такой страницы не существует.

3. Если я пишу вместо

RewriteCond %{REQUEST_URI} /post/(.*)$
RewriteRule ^(.*)[\/post\/](.*)$ viewpost.php?id=$2 [L]

к примеру

RewriteCond %{REQUEST_URI} /view-all/(.*)$
RewriteRule ^(.*)[\/view-all\/](.*)$ index.php?id=$2 [L] ,

то сервер выдает Internal Server Error


Как решить все эти проблемы?

И еще хотелось бы каким-либо образом реализовать, чтобы если в строке написано /post/send , то выполнялся не /viewpost.php?id=send , а /sendpost.php



2. .htaccess

Как сделать так, чтобы пользователь мог зайти по ссылке вида /post/31 , но не мог зайти по равноценной ссылке /viewpost.php?id=31 ?



Буду очень благодарен за вашу помощь. :)
583
25 февраля 2006 года
#define
150 / / 03.12.2002
Не много ли проблем из-за ЧПУ (человеко-понятный урл)? Я с mod_rewrite не работал, но слышал, что он работает не очень быстро и создает б`Ольшую нагрузку на сервер. Я в свое время тоже делал себе ЧПУ, но обошелся без mod_rewrite'а, но все тем же .htaccess + php-код. Хотя у меня стояла немного другая задача - не делать алиас для существующих ссылок, а сделать такую адресацию вообще (на сайте можно посмотреть чего добился - ссылка внизу). В .htaccess писал ErrorDocument 404 /, а в index.php парсил $REQUEST_URI нужным образом.

Повторюсь, что с mod_rewrite'ом я не работал, но мне кажется что ваши вопросы по большей части касаются регулярных выражения.
Думаю что 1ый вопрос возможно разрешится чем-то вроде:
RewriteCond %{REQUEST_URI} ^http://localhost/post/(.*)$
RewriteRule ^http://localhost[\/post\/](.*)$ viewpost.php?id=$1 [L]
Во 2ом вопросе можно предположить следующее написание:
RewriteCond %{REQUEST_URI} ^http://localhost/post/?(.*)$

Internal Server Error может возникать из-за некорректного синтаксиса в .htaccess, причем не обязательно касающегося mod_rewrite'а.

А зачем запрещать вход по старым ссылкам я не понимаю, пусть ходят - жалко что-ли :) Тем более если форум индексирован поисковиками. Из самого простого могу предложить перекидывать со старых ссылок на новые - Redirect viewpost.php /post. Хотя тут я возможно ошибаюсь.

Надеюсь чем-то помог.
14K
26 февраля 2006 года
Crypton
16 / / 26.02.2006
Options -Indexes
Options +FollowSymLinks

RewriteEngine on

RewriteBase /
RewriteRule ^post/send([/]*)$ sendpost.php [PT,L]
RewriteRule ^post/([a-zA-Z0-9_-]+)([/]*)$ viewpost.php?id=$1 [PT,L]

работает 100%

решает все то что ты написал кроме "Как сделать так, чтобы пользователь мог зайти по ссылке вида /post/31 , но не мог зайти по равноценной ссылке /viewpost.php?id=31 ?"... это попробуй средствами PHP решить

PS: mod_rewrite работает достаточно быстро потому как отрабатывает первым.
1.9K
03 марта 2006 года
Andius
61 / / 04.01.2004
Спасибо большое!!! :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог