Не уверен, как заставить mod_rewrite писать в определенный формат - PullRequest
1 голос
/ 27 марта 2011

Я пытаюсь понять, как правильно использовать mod_rewrite. У меня есть сообщения в моей базе данных, которые имеют название и дату. Прямо сейчас я использую mysite.com/post.php?id=3, чтобы получить мои данные и заполнить страницу. Я хотел бы, чтобы это было так: mysite.com/2011/03/27/my-title-like-so/. Я предполагаю, что мне придется запросить в моей базе данных что-то кроме идентификатора, но я не знаю. Кто-нибудь может помочь? Возможно, я смотрю на что-то очень простое. Пока у меня это выглядит так: mysite.com/post/2/, но это не очень помогает: P

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 марта 2011

Если вы не хотите включать идентификатор в URL, я бы предложил следующий подход.

В вашей таблице "posts" включите поле "url" (или "friendly" или что-то еще), которое содержит URL, по которому вы хотите, чтобы ваш пост был доступен. Вставляя сообщение, просто удалите все несловарные символы и замените их на '-'.

Затем, когда URL-адрес попадет в вашу систему, вы можете просто сопоставить этот URL-адрес непосредственно с полем "url".

Итак, используя ваш пример, ваш URL будет http://mysite.com/2011/03/27/my-title-like-so/ Поле «url» будет содержать «my-title-like-so».

Вы можете использовать простое правило перезаписи, например, следующее:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f # if requesting file that doesn't exist, use the rule below
RewriteCond %{REQUEST_FILENAME} !-d # if requesting a directory that doesn't exist, use the rule below
RewriteRule ^(.*)$ index.php?myvar=$1 [L,QSA]

Это поместит содержимое URL после домена:

http://mysite.com/[catches everything here]

И будет хранить его в глобальном $ _GET как 'myvar'

Затем вы можете выполнить любую обработку этого URL в php:

$url_string = my_sanitising_code($_GET['myvar']);
$url_array = explode('/', $url_string);

Теперь у вас есть массив всех частей URL, и вы можете делать с ними все, что пожелаете.

1 голос
/ 29 марта 2011

Вы должны захватить значения, которые передаются в движок для извлечения данных, которые вы хотите.Итак:

RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ fetch.php?year=$1&month=$2&day=$3&title=$4 [L]

должно соответствовать вашему формату.Затем http://mysite.com/fetch.php может использовать значения $_GET s для извлечения базы данных и отображения хороших вещей.

1 голос
/ 27 марта 2011

Обычной практикой является включение в URL и идентификатора, и заголовка / даты.Таким образом, это выглядит хорошо для поисковых систем, и вы все равно можете эффективно получить его по идентификатору.Как пример, посмотрите на URL для этого вопроса stackoverflow.

/6291644/ne-uveren-kak-zastavit-modrewrite-pisat-v-opredelennyi-format

Просто предположение, но этот номер в URL, вероятно, является сгенерированным идентификатором.Таким образом, вы используете идентификатор и просто игнорируете остальную часть URL, например:

RewriteRule /questions/(\d+) question.php?id=$1
...