Utilisez htaccess pour réécrire l'URL d'un répertoire dans un fichier PHP
P粉957723124
P粉957723124 2024-01-10 17:18:14
0
1
357

J'essaie d'appliquer des règles de réécriture simples à l'aide de fichiers htaccess. J'héberge cette page sur localhost en utilisant XAMPP :

localhost/naveesh/services.php

Les moyens possibles pour demander cette opération sont les suivants :

localhost/naveesh/services?serv=Boat%20Dealers

Ce que je veux faire, c'est réécrire la demande pour l'URL suivante vers l'URL ci-dessus

localhost/naveesh/services/Boat-Dealers

J'ai essayé ceci mais cela m'a donné une erreur 404.

RewriteEngine On
RewriteRule ^/naveesh/services/([^/]+)/?$ /naveesh/services.php?serv= [L,QSA]

Après quelques recherches, j'ai essayé une autre option :

RewriteEngine On
RewriteBase /naveesh/

# Hide .php extension
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]

RewriteRule ^services/([^/]+)/?$ /services.php?serv= [L,QSA]

Cependant, il y a trop de problèmes de redirection interne maintenant

P粉957723124
P粉957723124

répondre à tous(1)
P粉343408929

C'est votre première règle ("Masquer l'extension .php") qui provoque "Trop de redirections internes" car elle ne fait (à tort) services/Boat-Dealers.php 的请求重写为 services/Boat-Dealers.php.php 等。这是因为条件(始终成功)没有检查您最终重写的内容。 REQUEST_FILENAME pas ce que vous attendez. (Bien qu'inverser l'ordre de ces règles résout ce problème immédiat.)

Veuillez consulterMon commentaire sur ce qui suitProblème sur ServerFault Plus de détails sur ce problème spécifique.

Cependant, la deuxième règle est également incorrecte (comme indiqué dans @Réponse de Faizal).

Les règles sont également dans le mauvais ordre.

Supposons que votre .htaccess 文件位于 /naveesh/.htaccess (不是文档根目录),那么您的完整 .htaccess fichier ressemble à ceci :

# Disable MultiViews
Options -MultiViews

RewriteEngine On

RewriteRule ^services/([^/]+)/?$ services.php?serv= [QSA,L]

# Hide .php extension
RewriteCond %{DOCUMENT_ROOT}/naveesh/.php -f
RewriteRule ^(.*?)/?$ .php [L]

Notez que le préfixe remplacement slash sur la chaîne a été supprimé.

La directive RewriteBase n'est pas nécessaire ici. Le RewriteBase 指令。相对替换是相对于.htaccess remplacement

relatif est relatif au répertoire où se trouve le fichier .htaccess.

MultiViews,因为如果禁用,此规则将无法按预期工作。该请求将被重写为 services.php,但不包含 servVous devez vous assurer de désactiver les

paramètres d'URL. (Plusieurs vues sont parfois activées sur certains serveurs partagés, ce qui peut provoquer de nombreux conflits.)

De plus, vous ne devriez pas vraiment autoriser les barres obliques finales facultatives sur les URL demandées. Cela peut entraîner des problèmes de contenu en double, car vous disposez de deux URL différentes (une avec une barre oblique finale et une sans barre oblique finale) desservant le même contenu. Il n'y a pas de barre oblique finale dans votre exemple d'URL, alors pourquoi l'inclure ? Si vous devez autoriser les barres obliques finales facultatives (par exemple, si vous avez de mauvais liens entrants pointant vers des URL non canoniques), vous devez alors rediriger en externe un lien vers un autre. 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!