Не совсем важно: URL меняется на www.example.com/main/
Вы можете легко сделать это с помощью шаблона фронт-контроллера, за исключением последнего бита (если это действительно необязательное требование или нежелательное поведение ?). Если бы все URL-адреса «изменились» на /main/
, то вы не сможете легко направить запрос соответствующим образом - это было бы невозможно добавить в закладки - и это могло бы сбить пользователей с толку.
Вы не указали где вы хотите, чтобы файл .htaccess
был go. Я предполагаю, что вы хотите это на root вашего сайта. (В качестве альтернативы вы можете иметь его в подкаталоге /main
, но вам нужно будет немного изменить директивы.)
Например, используя mod_rewrite для внутренней перезаписи запросов для URL /main/<something>
на /main/index.php
, где /main/<something>
не сопоставляется с каталогом, попробуйте следующее:
RewriteEngine On
RewriteBase /main
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^main/[^.]+$ index.php [L]
Регулярное выражение ^main[^.]+$
соответствует URL-адресам, которые не содержат точку, поэтому это, естественно, исключает запросы, похожие на файлы. Итак, я исключил проверку существующих файлов (только для существующих каталогов - как указано).
Затем в index.php
вы можете проверить суперглобальный $_SERVER['REQUEST_URI']
для доступа к запрошенному URL. Нет необходимости явно передавать запрошенный URL в ваш скрипт. Обратите внимание, что переменная PHP $_SERVER['REQUEST_URI']
также содержит строку запроса (если есть). (Шаблон RewriteRule
соответствует только URL-пути, что, в частности, исключает строку запроса.)