Я использую директиву FallbackResource для маршрутизации всех веб-запросов через фронт-контроллер /index.php:
FallbackResource /index.php
Работает отлично, но меня беспокоит одно. Дело в том, что /index.php по-прежнему доступен напрямую - у того же ресурса есть два URL-адреса:
http://www.example.com/resource-path
http://www.example.com/index.php/resource-path
Я надеялся, что 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]
Надеюсь, это поможет вам хотя бы. Я попробовал назначить награду, но, похоже, ни у кого нет ответа.