Comment puis-je capturer un chemin d’URL local complet avec réécriture de mod?

Comment puis-je capturer un chemin d’URL local complet avec réécriture de mod?

Par exemple, mon projet se trouve dans http://{localhost}/projects/mywebsite/index.php

J’ai essayé avec cette RewriteBase /projects/mywebsite/ mais cela ne fonctionne pas pour ErrorDocument .

mon .htaccess,

 RewriteEngine on RewriteBase /projects/mywebsite/ ErrorDocument 404 /error.php 

Je dois faire ErrorDocument 404 /projects/mywebsite/error.php mais ce n’est pas dynamic. Je dois le changer à deux endroits chaque fois pour chaque projet.

Des idées?

ErrorDocument n’accepte aucune variable env contrairement aux règles mod_rewrite . Voici ce que vous pouvez faire:

  1. Au lieu de ErrorDocument utilisez les règles mod_rewrite pour gérer les problèmes 404 (voir ci-dessous)
  2. Générer dynamicment la valeur RewriteBase aide de règles

Vous pouvez utiliser ce code dans votre racine .htaccess:

 RewriteEngine On RewriteBase / # Determine the RewriteBase automatically/dynamically RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$ RewriteRule ^(.*)$ - [E=BASE:%1] # use %{ENV:BASE} variable set above for routing file/dir not found RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . %{ENV:BASE}error.php?e=404 [L,QSA] 

Le ErrorDocument fait partie du kernel apache, il n’est pas affecté par les éléments Rewrite qui sont un module complètement séparé.

Si vous avez besoin de sortir le contenu de error.php , alors error.php -le de l’en-tête php (basé sur votre question précédente) et ne vous fiez pas à ErrorModule. Peut-être que quelque chose comme:

 header("HTTP/10 404 Not Found"); include("error.php");