Retrait de l' .extension php avec le mod_rewrite
Je veux un mod_rewrite règle, donc je peut faire référence à une page sans la .extension php, mais remanié de manière à inclure l'extension php. Ce sera en cours d'exécution sur un 1&1 serveur.
Y a de bonnes références pour que je puisse apprendre plus moi-même?
- double possible de Faire un rewriterule supprimer .extension de php?
- Veuillez garder à l'esprit que vous êtes en train de créer une ressource permanente pour le reste de la web lorsque vous posez une question et obtenir des réponses des autres. Utiliser une véritable question de titre et de ne pas écrire le corps, comme si c'est une lettre personnelle.
- double possible de Comment faire pour supprimer l'extension de fichier à partir de l'adresse du site web? (échantillon des photos jointes)
Vous devez vous connecter pour publier un commentaire.
http://example.com/something
seront traitées comme si c'était une demande desomething.php
Pour rediriger toutes les demandes qui ne sont pas un fichier physique le même nom mais avec .php:
RewriteRule contact.php contact [R=301,L]
. Pour rediriger toutes les requêtes se terminant en .php,RewriteRule (.*)\.php $1 [R=301,L]
. Notez l'utilisation de la R=301 à force HTTP 301 Définitivement Déplacé de redirection, ce qui provoque le navigateur pour envoyer une nouvelle requête HTTP pour la nouvelle URL, ce qui à son tour va déclencher votre règle de mappage de l'URL de retour à l' .fichier php qui gère en fait c'.RewriteRule (.*)\.php /$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([A-Za-z0-9-]*)$ $1.php [L]
Et se terminant par une boucle de redirection.something.php
,http://example.com/something
ne sera pas renvoyer une 404, il sera de retour de 500 Erreur Interne du Serveur). Pour résoudre ce problème, j'ai ajouté une troisième Condition:RewriteCond %{REQUEST_FILENAME}.php -f
, qui n'autorise la réécriture si il est en fait un fichier php correspondant.http://example.com/something/
? avec une barre oblique. L'URL de substitution seraithttp://example.com/something/.php
, qui ne fonctionne pas. L'erreur est dans cette regex groupe (.*) c'est en passant tout, y compris la barre oblique./i/hate/you!
? Eh bien, il va 404 car cela n'existe pas, et c'est très bien étant donné que nous ne génèrent pas de toutes les liens vers/i/hate/you!
et si quelqu'un veut type, ils sont libres de recevoir le message d'erreur. Si vous avez réellement voulu corriger ce que vous avez perçu comme une erreur, la réponse n'est pas simplement de changer le groupe de capture de compte pour des barres obliques, mais pour vérifier si un fichier PHP correspondant à l'URI avec.php
annexé existe de réécrire la demande. Un autreRewriteCond
, qui est.Accepté la réponse ci-dessus, ne retirez pas le
.php
extension d'url qu'il permet tout simplement de vous rendre sur.php
les fichiers sans extension. Pour supprimer le.php
extension complètement à partir d'url , vous pouvez utiliser les Règles suivantes dansroot/.htaccess
:Probablement ce que vous voulez vraiment est juste une façon de ne pas avoir le suffixe à tous. L'
le meilleur moyen que j'ai trouvé de le faire est d'utiliser les Fichiers directive .htaccess ou dans
fichiers de configuration d'apache:
Cela permet d'éviter certains inconvénients de réécritures, par exemple, l'accès direct de la .php
fichier.
.htaccess: ajouter les lignes suivantes:
https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/
Maintenant vous devez vérifier la directive AllowOverride condition dans apache2.fichier journal:
définir les options AllowOverRide All dans votre répertoire racine du site web:
Si vous essayez d'accéder à votre page web sans le .extension php, vous pourriez rencontrer l'erreur suivante dans votre apache erreur.fichier journal:
/var/www/html/web/.htaccess: Invalid command 'RewriteEngine", peut-être mal orthographié ou défini par un module non inclus dans la configuration du serveur
Pour résoudre ce problème: Vous n'avez pas le module mod_rewrite est installé, l'installer:
Exécutez la commande suivante: ln -s /etc/apache2/mods-available/réécriture.charge /etc/apache2/mods-enabled/réécriture.charge
.htaccess: Invalid command 'RewriteEngine", peut-être mal orthographié ou défini par un module non inclus dans la configuration du serveur
De nouveau, après l'actualisation de la page web, vous pouvez obtenir le folloowing d'erreur en erreur.fichier journal:
Pour y remédier il faudrait ajouter les lignes suivantes dans apache2.conf:
https://forums.digitalpoint.com/threads/htaccess-addtype-application-x-httpd-php-php-htm-html-and-maybe-a-fix.7584/#post-2491687
Maintenant, je peux accéder à la test.php fichier en utilisant simplement le nom de fichier: test
De cette Option fera nettoyer SEO friendly URL. Removing.php extensions à partir de l'URL visible, et de s'assurer que l'URL est accessible sans .php affichera toujours la .fichier php. J'ai été incapable de trouver une autre réponse que réalisé cela sur plusieurs threads.
N'oubliez pas d'activer le mod rewrite. Sur Debian ou linux Unbuntu ce qui suit fonctionnera
sudo a2enmod rewrite
et
sudo service apache2 restart
Modifier la section de votre apache2.fichier conf de la manière suivante.
Si vous l'utilisez .htaccess pour ré-écrire s'assurer que le apache2.conf au moins a ces options activées.
Enfin sur certaines installation d'Apache, vous pouvez aussi avoir besoin de définir
AllowOveride All
dans une .fichier conf dans /etc/apache2/sites-available ou /etc/apache2/sites-enabled.
La réécriture d'apache2.fichier conf, par opposition à .htaccess est répandu pour être plus rapide.
Pour obtenir http://example.com/test reliant http://example.com/test.php utilisation:
Pour une raison quelconque, je n'étais pas en mesure d'obtenir toute autre solution fonctionne correctement. J'ai mis ça dans un
.htaccess
fichier à la racine de mon site. J'espère que cela fonctionnera pour vous.Il est important de garder à l'esprit que si votre en-tête ou l'URL contient le .extension php, il ne sera pas supprimé. Vous aurez besoin de supprimer l'extension.
Utiliser ce...
plutôt que cela...
Pour diriger quelques fichiers, il peut être plus facile d'éviter le RewriteEngine.
J'ai utilisé ceci:
C'est moins puissant et flexible que le réécrire, mais probablement plus rapide et semble être la voie à suivre si vous voulez juste avoir un peu de fichiers gérés par PHP.