как написать это правило 404 в .htaccess - PullRequest
3 голосов
/ 01 октября 2011

У меня есть пользовательская CMS. Это работает очень хорошо, за исключением одной вещи. Мне интересно, как лучше реализовать 404 функциональности. На сайте должны быть только следующие типы URL

index.php?upn=something

или

gallery.php?groupId=2

Любые каталоги, которые добавляются к URL после index.php или gallery.php, должны выбрасывать 404. Также я хотел бы бросить 404, если содержимое не найдено в базе данных, когда указан upn. Я понимаю, что я могу бросить заголовок в php. Но я сказал, что постараюсь получить более полное представление об этой проблеме в целом. Так что, если у вас есть информация или указатели, я буду признателен им.

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Мне нравится делать это программно из моего кода PHP. Вы можете написать какой-нибудь простой Route Component, который попытается найти то, что вы хотите. Сегодня вы направляетесь только к действиям (index.php?upn= и gallery.php?groupId=), но когда-нибудь в будущем вы можете добавить новое, и вам следует изменить свой .htaccess, что более сложно. Если вы делаете все это на уровне своего приложения, вы можете изменить его проще.

Вставьте этот код в файл .htaccess в корне вашего проекта, и каждый запрос будет перенаправлен в router.php. Получив запрос, вы можете решить, какое действие предпринять.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ router.php?url=$1 [QSA,L]
</IfModule>

Надеюсь, это поможет.

1 голос
/ 01 октября 2011

Вы должны вернуть 404 в коде php, но вы можете установить обработчик 404 так, как описано в htaccess:

ErrorDocument 404 /errors/notfound.html
...