3 votes

Éviter les doublons d'URL avec la directive FallbackResource d'Apache

J'utilise la directive FallbackResource pour acheminer toutes les requêtes web via le contrôleur frontal /index.php :

FallbackResource /index.php

Il fonctionne très bien mais une chose me dérange. C'est le fait que /index.php est toujours disponible directement - la même ressource a deux URL :

  • http://www.example.com/resource-path
  • http://www.example.com/index.php/resource-path

J'espérais que FallbackResource s'occuperait de cela afin que seule l'URL principale soit disponible, car cela pourrait poser un problème de référencement. Quelle est la meilleure façon de résoudre ce problème ?

0 votes

C'est choquant que personne n'ait répondu à cette question. Je me demande la même chose.

2voto

Yes Barry Points 170

Je n'ai pas trouvé de solution dans Apache pour cela. La seule solution que j'ai trouvée est de le gérer en PHP, ce qui va presque à l'encontre de l'objectif de l'utilisation de l'option FallbackResource /index.php en premier lieu.

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;
}

Ce n'est pas idéal mais cela fonctionne. C'est bizarre qu'il y ait si peu d'informations sur le problème des doublons d'URLs avec FallbackResource . Néanmoins, cette solution n'a pas suffi à l'OMI, si bien que Ce que j'ai fait personnellement, c'est revenir au 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]

J'espère que cela vous aidera au moins. J'ai essayé une prime mais personne ne semble avoir de réponse.

0 votes

Merci... la confirmation du problème est presque aussi bonne que la solution :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X