(Базовая) разбивка Mod_rewrite - PullRequest
0 голосов
/ 15 января 2012

Я в несколько часов смотрю различные статьи о mod_rewriting, но все, что я пробую сам, никогда не работает. Я надеюсь, что смогу дать вам, ребята, модель URL, и получить взамен рабочее правило и разбивку этого правила (я достаточно хорошо знаком с регулярным выражением). Таким образом, я могу адаптироваться и к будущим требованиям.

Структура: domain.com/contents/page.php?id=123&u=page-slug

Я хочу, чтобы пользователь набрал: domain.com/page-slug и будет успешно перенаправлен на соответствующую страницу.

Из того, что я прочитал, это не должно влиять на PHP GET - это правильно? Даже если идентификатор на самом деле не находится в адресной строке (вопрос, но я совершенно новичок в этом)? Удивительно, что учебники пропускают ...

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

Ответы [ 2 ]

1 голос
/ 15 января 2012

Если идентификатор необходим, тогда он должен присутствовать в симпатичном URL, то есть что-то вроде domain.com/page-slug/page-id.

Чтобы переписать это в page.php, добавьте следующее в ваш .htaccess в корневом каталоге domain.com, как показано ниже

RewriteEngine on
RewriteBase /

#if not a file or a directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite requests of the form domain.com/page-slug/123
RewriteRule ^([-a-zA-Z0-9]+)/([0-9]+)/?$ contents/page.php?id=$2&u=$1 [NC,L,QSA]

Если вы хотите узнать больше, посмотрите этот список ресурсов .htaccess и mod_rewrite в сети

0 голосов
/ 15 января 2012

Из того, что я прочитал, это не должно влиять на PHP GET - это правильно?Даже если идентификатор на самом деле не находится в адресной строке (вопрос, конечно, но я совершенно новичок в этом)?

Если в URL нет идентификатора, PHP GET не будетполучить идентификатор.Но в коде вы даете это будет работать.Поскольку вы устанавливаете фиксированный идентификатор в htaccess, идентификатор всегда будет 123.


И почему он никогда не работает?вы получите ошибку, ошибку apache или ...?Вы добавили модуль mod_rewrite в httpd.conf?Если нет:

Найдите файл httpd.conf и откройте его в редакторе.Найдите в файле:

#LoadModule rewrite_module modules/mod_rewrite.so

Удалите # в начале строки, сохраните файл и перезапустите apache.


Ваш файл .htaccess должен выглядеть следующим образом:

RewriteEngine On
RewriteBase /

RewriteRule ^(\d*?)/(.*?)$ page.php?id=$1&u=$2

Затем он заменяет domain.com/id/page-slug на domain.com/page.php?id=id&u=page-slug

.
...