Перенаправить каждый запрос в файл в верхней папке - PullRequest
1 голос
/ 21 марта 2020

У меня есть такая структура на моем WebServer:

\main
   index.php

Файл index.php доступен с www.example.com/main/.

Теперь я хочу перенаправить каждый запрос со структурой подпапок (из несуществующих папок) в мой index.php файл и передайте введенный URL.

Как:

www.example.com/main/world/fish
www.example.com/main/hasuisdg
www.example.com/main/bowl/soup
www.example.com/main/salat

На все эти URL должен отвечать мой index.php при передаче URL .

Общий пример:

Код index.php:

<?php

echo passedurl(); //this is the function I am looking for

?>

Ввод www.example.com/main/ilikestackoverflow в браузере. Отображение www.example.com/main/ilikestackoverflow на веб-странице.

Не совсем важно:

URL-адрес меняется на www.example.com/main/.

1 Ответ

1 голос
/ 21 марта 2020

Не совсем важно: 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-пути, что, в частности, исключает строку запроса.)

...