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

Избегайте дублирования URL-адресов с помощью директивы Apache FallbackResource

Я использую директиву FallbackResource для маршрутизации всех веб-запросов через фронт-контроллер /index.php:

FallbackResource /index.php

Работает отлично, но меня беспокоит одно. Дело в том, что /index.php по-прежнему доступен напрямую - у того же ресурса есть два URL-адреса:

Я надеялся, что FallbackResource справится с этим, чтобы был доступен только основной URL, потому что это могло создать проблемы с SEO. Как лучше всего это исправить?

Я не нашел для этого решения в Apache. Единственное решение, которое я нашел для этого, - это обработка его на PHP, что почти сводит на нет цель использования FallbackResource /index.php в первую очередь.

if (preg_match('#^/index.php#', $_SERVER['REQUEST_URI'])) {
    $redirect = preg_replace('#^/index.php#', '', $_SERVER['REQUEST_URI']);
    if (empty($redirect)) {
        $redirect = '/'; // in case request is domain.com/index.php with no trailing slash
    }
    header('Location: ' . $redirect);
    exit;
}

Это не идеально, но работает. Странно, что так мало информации о проблеме повторяющихся URL-адресов с FallbackResource. Тем не менее, ИМО этого решения не хватило, поэтому что я сделал лично, так это вернулся к mod_rewrite.

RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^ %{ENV:BASE}/index.php [L]

Надеюсь, это поможет вам хотя бы. Я попробовал назначить награду, но, похоже, ни у кого нет ответа.