Использование .htaccess для перенаправления всех запросов через index.php ЗА ИСКЛЮЧЕНИЕМ определенного набора запросов - PullRequest
4 голосов
/ 09 декабря 2010

Так что я просто унаследовал сайт.Первое, что я хочу сделать, - это создать небольшую стандартную, легкую в использовании CMS, которая позволяет создавать страницы с любым URL (например, what.html).

Поэтому, если пользователь нажмет пример.com / what.html, он должен получить любую информацию из базы данных для what.html и отобразить ее.Это обычный процесс.

Моя проблема в том, что на сайте есть довольно много страниц (все они перечислены в .htaccess), которые должны оставаться доступными.Например, / Promotions связан с promotions.php через .htaccess, и мне нужно, чтобы он оставался таким.

Кто-нибудь знает, как я могу создать файл .htaccess, чтобы определенные перезаписи работали, но перенаправляливсе другие запросы через index.php?

В настоящее время у меня просто .htaccess показывает пользовательскую страницу 404, которая, в свою очередь, проверяет БД на URL и отображает ее, если она существует.Это простое решение, но я знаю, что у некоторых людей есть странные панели инструментов браузера (глупые или нет, они существуют :)), которые автоматически перенаправляют 404, и я не хотел бы раздражать своих пользователей этими панелями инструментов, не разрешая доступ к определенным страницам.

Большое спасибо за вашу помощь!

Ответы [ 2 ]

5 голосов
/ 09 декабря 2010

RewriteRule для продвижения по-прежнему должен работать, так как он не 404.

Если обработчик 404 показывает страницу, потому что она существует в базе данных, то он действительно должен возвращать статус 200 OK (переопределяя404), поэтому у вас не должно быть проблем с панелями инструментов браузера.

Что касается изменения маршрута, вы можете сделать что-то вроде этого:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^.*/(promotions|anotherone|somethingelse)($|/.*$) [NC]
RewriteRule ^(.*)$ /index.php?p=$1
3 голосов
/ 13 сентября 2011

Вот еще один вариант:

RewriteEngine on
RewriteRule ^/i/(.*)$ - [L] 
RewriteRule ^/css/(.*)$ - [L] 
RewriteRule ^index.php$ - [L]
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]
...