Задать вопрос

Modrewrite — статья для новичков?

Часто вижу красивые ссылки вида:
site.domain/user-%user_id%

или
site.domain/user/%user_id%/

или
user%user_id%.site.domain/


Догадываюсь, что тут не обошлось без Apache ModRewrite, о котором я частенько слышу, но вот с ним ни разу не сталкивался.


Так как же делаются такие красивые URL и как при создании нового пользователя, создавать и урлу для его профиля?
  • Вопрос задан
  • 2774 просмотра
Подписаться 8 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 8
SwampRunner
@SwampRunner
вот так:

#domain.com/user-66
RewriteRule ^(user\-)([0-9]+)$ /user.php?id=$2 [L]

#domain.com/user/66/
RewriteRule ^(user)/([0-9]+)/$ /user.php?id=$2 [L]

#user.domain.com
RewriteCond %{HTTP_HOST} ^([0-9a-z\-]+)\.domain\.com$ [NC]
RewriteRule ^$ /user.php?login=%1 [L]

Последний вариант с виртуальными поддоменами возможен только если у вас есть доступ к настройкам сервера.
Ответ написан
Doktor_Gradus
@Doktor_Gradus
А свою 404-ую сделать тоже легко, в том же .htaccess пишете

ErrorDocument 404 /error404.html

или
Ответ написан
Комментировать
Doktor_Gradus
@Doktor_Gradus
или

ErrorDocument 404 /index.php?error=404

или что угодно.
Ответ написан
Doktor_Gradus
@Doktor_Gradus
Для того, чтобы запретить прямой доступ к файлам в apache есть команда Deny

Например, чтобы запретить доступ к какой либо папке (реально существующей) нужно в эту папку поместить .htaccess со строкой Deny from all

Но попытка достучаться до такой папки это уже «ошибка 403 — Доступ запрещён» и в общем .htaccess
уже надо писать
ErrorDocument 403 /error404.html
Ответ написан
Комментировать
@Robotex Автор вопроса
А можно заставить его закидывать параметры не по GET, а с помощью POST?
Ответ написан
Комментировать
habrahabr.ru/blogs/webdev/101585/ — по поводу вашего 3 пунтка
Ответ написан
Комментировать
m00t
@m00t
Я считаю, что правила вида

RewriteRule ^(user\-)([0-9]+)$ /user.php?id=$2 [L]

как вам подсказали в комментарии выше, хоть и являются верными для данной задачи, но в последствии приводят к сильному разрастанию .htaccess при росте сайта — вы потом захотите сделать не только такие урлы для пользователей, но и для каталога, и для статей что-то типа «articles/title.html». Несколько более общий принцип создания красивых ЧПУ описан в моем комментарии тут habrahabr.ru/qa/1488/#answer_6155
Ответ написан
Комментировать
@Robotex Автор вопроса
Создал такой .htaccess

RewriteEngine on
RewriteBase /

#domain.com/mode/id/
RewriteRule ^(\w+)/([0-9]+)/{0,1}$ /index.php?mode=$1&id=$2 [L]

Deny from all

ErrorDocument 403 /index.php?error=404
ErrorDocument 404 /index.php?error=404

Теперь вообще все запрещено оказалось.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы