Назад | Перейти на главную страницу

Mod_rewrite для удаления строк запроса

Я работаю над этим некоторое время, но не могу найти именно то, что ищу. Я пишу веб-приложение, чтобы мои пользователи могли создавать и публиковать фрагменты HTML-контента в домене и структуре папок URL по своему выбору. Все содержимое и запрошенные структуры URL-адресов хранятся в базе данных. У меня есть весь код в моем index.php (в корневой папке) для доступа к содержимому базы данных, и на основе имени сервера (и, надеюсь, структуры папок) выберу правильный контент из БД и отобразит его до конца -пользователи браузер. Итак, моя ситуация выглядит так:

www.test.com/index.php?id=123234345

... будет отображать правильную страницу, но я хочу, чтобы мои пользователи могли определять уникальное «имя страницы» вместо использования числового индекса (также я хочу скрыть часть /index.php), так что я бы хотел, чтобы конечный пользователь должен увидеть:

www.test.com/arbitrary-unique-keyword/keyword2/keyword3

который вызовет страницу index.php в корневой папке. Затем я буду использовать переменную PHP $ _SERVER ['PATH_INFO'], чтобы сопоставить запрошенную структуру папок с правильным содержимым в моей базе данных и отобразить это. Весь материал, который я нашел до сих пор, предполагает, что я жестко закодирую части структуры папок в правила ... но я думаю, что мне нужно что-то попроще (возможно).

Итак, вкратце вопрос:

Как мне использовать mod_rewrite, чтобы разрешить передачу всех "несуществующих" путей к папкам в основной index.php, находящийся в корневой папке? (Для всех существующих путей, например, для вызовов изображений ... я хочу, чтобы они преуспели и не были явно направлены на index.php)

Спасибо всем, дайте мне знать, могу ли я что-нибудь прояснить.

Вы можете добиться этого с помощью RewriteCond используя -f условие, которое проверяет наличие файла, например:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1

Однако ситуация может быть более сложной, если существует несколько условий перезаписи или Alias/ScriptAlias директивы. В этом случае сервер может не предоставить REQUEST_FILENAME. Более безопасный подход, но тот, который может быть неправильным для сложных настроек, - это использовать напрямую DOCUMENT_ROOT, т.е.

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f
RewriteRule ^(.*)$ /index.php/$1