Existe-t-il une seule variable que je peux utiliser dans mod_rewrite et qui est équivalente à% {DOCUMENT_ROOT}% {REQUEST_FILENAME}?

J’utilise mod_rewrite dans le fichier httpd.conf (pas dans un fichier .htaccess) et je me demandais s’il y avait une variable que je pourrais utiliser qui représente la demande entière; ie DOCUMENT_ROOT représente “path / to / htdocs” et REQUEST_FILENAME représente “/path/to/file.php”. Existe-t-il une seule variable Apache qui représente les deux ensemble, comme “path / to / htdocs / path / to / file.php”?

La raison pour laquelle je demande est que dans mes directives de réécriture, cela ne fonctionne pas:

 RewriteCond %{REQUEST_FILENAME} -f 

mais cela fait:

 RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f 

la chose étrange est que tous les tutoriels que j’ai vus utilisent le premier format, mais cela ne fonctionnait pas pour moi et je suis venu avec le deuxième format sur mon propre – et je n’ai jamais vu le deuxième format utilisé dans tous les tutoriels. Est-ce que cela a à voir avec le fait que j’écris dans httpd.conf au lieu d’un document .htaccess?

Lorsque je génère la variable% {REQUEST_FILENAME}, celle-ci n’inclut pas la racine du document.

%{DOCUMENT_ROOT} n’est pas website.com , c’est le chemin local du système de fichiers associé à la directive DocumentRoot du site. Par exemple: /var/www/localhost/htdocs

Si vous voulez website.com , vous voulez soit %{SERVER_NAME} (défini par la directive UserCanonicalName ) ou %{HTTP_HOST} défini par l’en-tête Host: request.

De plus, %{REQUEST_FILENAME} inclut la racine du document, c’est plus ou moins l’équivalent de: %{DOCUMENT_ROOT}%{REQUEST_URI} . Donc, étant donné l’exemple ci-dessus de la racine du document et une URI de demande de /images/title.png , alors le %{REQUEST_FILENAME} serait /var/www/localhost/htdocs/images/title.png

Si ce que vous cherchez est: website.com/path/to/file.php , alors non. Il n’y a pas une seule variable qui vous rassemble. Vous voulez soit:

 %{HTTP_HOST}%{REQUEST_URI} 

ou

 %{SERVERNAME}%{REQUEST_URI} 

Est-ce que cela a à voir avec le fait que j’écris dans httpd.conf au lieu d’un document .htaccess?

Oui. À partir des documents Apache :

REQUEST_FILENAME
Le chemin complet du système de fichiers local vers le fichier ou le script correspondant à la demande, si cela a déjà été déterminé par le serveur au moment de la référence à REQUEST_FILENAME . Sinon, par exemple, lorsqu’il est utilisé dans un contexte d’hôte virtuel, la même valeur que REQUEST_URI .

Et REQUEST_URI est le “composant de chemin de l’URI demandé, tel que /index.html “.

la chose étrange est que tous les tutoriels que j’ai vus utilisent le premier format

Parce que la plupart des didacticiels sont écrits dans un contexte .htaccess (ou ).

Si elle est utilisée dans un contexte par serveur (c’est-à-dire avant que la requête ne soit mappée sur le système de fichiers), SCRIPT_FILENAME et REQUEST_FILENAME ne peuvent pas contenir le chemin complet du système de fichiers local car le chemin est inconnu. Les deux variables contiendront initialement la valeur de REQUEST_URI dans ce cas. Pour obtenir le chemin complet du système de fichiers local de la requête dans un contexte par serveur, utilisez une recherche anticipée basée sur l’URL %{LA-U:REQUEST_FILENAME} pour déterminer la valeur finale de REQUEST_FILENAME .