Как отключить нежелательные запросы? (MySQL, .htaccess, PHP) - PullRequest
0 голосов
/ 18 октября 2011

Для начала я начинающий с PHP и .htaccess.Вот моя дилемма ...

Я создал динамические страницы и использовал htaccess, чтобы переписать URL-адреса.Существует 3 типа страниц ... Примеры:

Состояние: example.com/massachusetts-colleges.html

Город: example.com/massachusetts-colleges/boston-ma-colleges.html

Колледж: example.com/massachusetts-colleges/boston-ma-colleges/harvard.html

Проблема заключается в том, что страницы запрашиваются (из старых ссылокструктура, вероятно), которая не должна существовать, такая как:

example.com / boston-ma-colleges.html

URL-адреса состояний хранятся в таблице местоположений вбаза данных (stateSlug = Массачусетс-колледжи).URL-адреса городов также хранятся в таблице местоположений в базе данных, и соответствующий слаг штата также сохраняется с этим городом (citySlug = boston-ma-colleges и stateSlug = massachusetts-colleges).Колледжи хранятся в другой таблице и используют идентификаторы для соответствия с городами.

Как я могу использовать .htaccess, чтобы предотвратить доступ к любым "ДРУГИМ" URL-адресам (на странице отображается шаблон и нет данных), и отображаетсястраница 404 (или перенаправление на домашнюю страницу)?

Вот так выглядит мой файл .htaccess:

RewriteEngine on
RewriteRule ^([^/\.]+)\.html?$ php/statePage.php?stateSlug=$1 [L]
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)\.html?$ php/cityPage.php?citySlug=$2&stateSlug=$1 [L]
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)/([^/\.]+)\.html?$ php/collegePage.php?collegeSlug=$3&citySlug=$2&stateSlug=$1 [L]

Опять же, я немного новичок в языках htaccess и php.Буду признателен за любую помощь в этом вопросе.

Спасибо!

Ответы [ 3 ]

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

Предполагая, что весь ваш контент соответствует одному из указанных выше URL-адресов, вы можете просто запретить доступ ко всему остальному, добавив в конец еще одно правило:

RewriteRule ^(.*)$ - [F]

Чтобы не связываться с запросами ваших изображений иCSS, вы должны добавить:

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif|js|css)$ [NC]
RewriteRule ^(.*)$ - [F]

Если у вас есть каталоги, которые должны быть недоступны, поместите в них .htaccess только со следующим:

Order deny,allow
deny from all
0 голосов
/ 18 октября 2011

Попробуйте следующее, но замените index.php на страницу 404:

Order allow,deny
Allow from all
RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$l [L]

Это должно перенаправить все запросы файлов и каталогов, которые не были найдены, на index.php или выбранный вами файл сценария, например страницу 404. Просто не забудьте установить в заголовках код ответа 404.

Я получил это на вики-странице CodeIgniter по адресу http://codeigniter.com/wiki/mod_rewrite/

Их вики-страница была очень полезна, когда я пытался решить подобную проблему.

0 голосов
/ 18 октября 2011

переписать все ваши публичные файлы в поддельный каталог /allow/.., отобразить 404 для любого запроса, который не находится в каталоге /allow/... Наконец переписать файлы из /allow/.. в реальный каталог.

Это отличный обходной путь IMO :) Лучше, чем использовать deny all в каждом каталоге ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...