Помогите с файлом .htaccess.mod_rewrite для пользовательских URL? - PullRequest
1 голос
/ 10 октября 2010

Положение:

У меня есть несколько сотен постов, каждый из которых относится к определенной категории.

A] Теперь, когда пользователь посещает домашнюю страницу, контент не зависит от категории, отсортированной по дате.

http://www.example.com

Он может перемещаться по разным страницам, например:

Тип 1: http://www.example.com/3, что соответствует http://www.example.com/index.php?page=3

Я, вероятно, могу сделать это в mod_rewrite

B] Затем пользователь может выбрать просмотр по категориям, например:

Тип 2: http://www.example.com/Football, что будет соответствовать

http://www.example.com/index.php?page=1&category=Football

Затем он может перемещаться по страницам, например:

Тип 3: http://www.example.com/Football/5, что => http://www.example.com/index.php?page=5&category=Football

C] У меня есть каталог View с index.php. Он показывает только отдельные сообщения, такие как:

Тип 4: http://www.example.com/View/1312 => http://www.example.com/View/index.php?id=1312

Вот mod_rewrite, который я делаю:

Перезаписать двигатель на RewriteRule ^ Просмотр /([^/.]+)/?$ Просмотр / index.php? Id = $ 1 [L]

Теперь вот проблемы, которые у меня есть

В точке C]: http://www.example.com/View/1312 работает нормально, но http://www.example.com/1312/ (обратите внимание на косую черту) разрывается и дает странные результаты. Q1) Итак, как мне поддерживать последовательность здесь?

Q2) В идеале я бы хотел, чтобы http://www.example.com/View/1514 показывал ошибку 404, если нет сообщения с идентификатором 1514, но теперь я должен вручную позаботиться об этом в коде PHP.

Как правильно обращаться с такими динамическими URL? особенно если URL неверный.

Q3) как мне обеспечить, чтобы http://www.example.com & http://www.example.com/ перенаправляли оба на http://www.example.com/index.php?page=1; (код mod_rewrite был бы полезен)

Обратите внимание, что существует только два файла index.php. Один в корневом каталоге, который делает все, кроме показа отдельных сообщений, о котором заботится index.php в каталоге View. Это логичный способ разработки сайта?

Ответы [ 2 ]

1 голос
/ 10 октября 2010

Чтобы исправить косую черту, просто поставьте /? перед $ в конце вашего паттерна

1 голос
/ 10 октября 2010

Попробуйте эти правила:

RewriteRule ^$ index.php?page=1 [L]
RewriteRule ^([0-9]+)/?$ index.php?id=$1 [L]
RewriteRule ^View/([0-9]+)/?$ View/index.php?id=$1 [L]
RewriteRule ^([A-Za-z]+)/?$ index.php?category=$1&page=1 [L]
RewriteRule ^([A-Za-z]+)/([0-9]+)/?$ index.php?category=$1&page=$2 [L]

Что касается другого вопроса: Да, поскольку Apache может сопоставить эти запросы с существующими файлами, он отвечает кодом состояния успеха.Теперь, если ваше приложение решит, что запрошенный ресурс не существует, вам нужно обработать его в своем приложении и отправить соответствующий код состояния.

...