Как перенаправить на целевую страницу при поиске доменного имени?

Недавно я узнал, как очистить свой URL-адрес, удалив «.php» или какой-либо другой пост и получив переменные в URL-адресе, и это хорошо. Но тогда у меня возникла проблема с целевой страницей. Всякий раз, когда я ввожу URL-адрес своего веб-сайта, например: https://example.com , я должен перейти на https://example.com/index, что в данном случае является целевой страницей. Кажется, я не могу понять это правильно.

Я попытался изменить файл .htaccess, но это не сработало, и код, оставшийся в .htaccess, выглядит следующим образом:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ router.php?url=$1 [L,QSA]

И в моем файле router.php есть кусок кода, который очищает URL-адрес. <?php

function split_url(){
    $url = isset($_GET['url']) ? $_GET['url'] : "index";
    $url = explode("/", filter_var(trim($url,"/"),FILTER_SANITIZE_URL));

    return $url;
}
$root= $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['SERVER_NAME']. $_SERVER['PHP_SELF'];
$root = trim(str_replace("router.php","",$root), "/");
define("ROOT", $root . "/");
$URL = split_url();
if (file_exists($URL[0].".php")){
    require($URL[0] . ".php");
}
else{
    require("404.php");
}

Проблема в том, что когда я ищу URL-адрес своего сайта ( https://example.com ), он загружает страницу, но она пуста, и только если я ищу ( https://example.com/index), она переносит меня на страницу со всем, что есть на ней. Пожалуйста, помогите мне с этим, если есть другой способ сделать это.

🤔 А знаете ли вы, что...
PHP обладает большим сообществом разработчиков и обширной документацией.


1
75
1

Ответ:

Решено
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ router.php?url=$1 [L,QSA]

Похоже, вам просто нужно установить DirectoryIndex на router.php. (Команда DirectoryIndex устанавливает файл для обслуживания при запросе каталога.) Из-за второго условия (директива RewriteCond) ваше существующее правило mod_rewrite ничего не делает для запросов к корневому каталогу (или любому другому каталогу, если на то пошло). Вот почему многие фронт-контроллеры используют index.php, который является документом DirectoryIndex по умолчанию.

Например, вверху вашего файла .htaccess:

DirectoryIndex router.php

Вышеупомянутое приведет к тому, что router.php будет искаться в любом запрошенном каталоге. Итак, запросите рут, он будет искать router.php в корне. Вы можете изменить это на путь, относящийся к корневому каталогу, который он всегда будет обслуживать /router.php (из корневого каталога) для любого запрошенного каталога. то есть. DirectoryIndex /router.php.

Похоже, что ваш PHP-скрипт по умолчанию должен иметь значение index.