Я работаю над этим некоторое время, но не могу найти именно то, что ищу. Я пишу веб-приложение, чтобы мои пользователи могли создавать и публиковать фрагменты 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