Je veux un ensemble de règles mod_rewrite afin de pouvoir faire référence à une page sans l'extension .php, mais je l'ai réécrit pour inclure l'extension php. Cela fonctionnera sur un serveur 1 & 1.
Existe-t-il de bonnes références pour que je puisse en apprendre plus moi-même?
RewriteEngine On
RewriteRule something something.php [L]
http://example.com/something
sera traité comme s'il s'agissait d'une demande pour something.php
Pour rediriger toutes les demandes qui ne sont pas un fichier physique portant le même nom mais avec .php:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]
La réponse acceptée ci-dessus ne supprime pas l'extension .php
des URL, elle vous permet uniquement de consulter les fichiers .php
sans extension. Pour supprimer complètement l'extension .php
des URL, vous pouvez utiliser les règles suivantes dans root/.htaccess
:
RewriteEngine on
#1)externally redirect "/file.php" to "/file"
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
#2)Internally map "/file" back to "/file.php"
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
Probablement ce que vous voulez vraiment est juste un moyen de ne pas avoir le suffixe du tout. Pour ce faire, la meilleure façon consiste à utiliser la directive Files dans les fichiers de configuration .htaccess ou Apache:
<Files myscript>
SetHandler cgi-script
</Files>
Cela évite certains des inconvénients des réécritures, telles que l’accès direct au fichier .php
Fichier .htaccess: ajoutez les lignes suivantes:
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/
Vous devez maintenant vérifier la condition AllowOverride dans le fichier Apache2.log: Set options AllowOverRide All dans votre répertoire racine Web:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Si vous essayez d'accéder à votre page Web sans l'extension .php, vous pouvez rencontrer l'erreur suivante dans votre fichier error.log Apache: /var/www/html/web/.htaccess: commande 'RewriteEngine' non valide, éventuellement mal orthographiée ou définie par un module non inclus dans la configuration du serveur
Pour résoudre ce problème: Le module mod_rewrite n'est pas installé. Pour l'installer: Exécutez la commande suivante: ln -s /etc/Apache2/mods-available/rewrite.load/etc/Apache2/mods-enabled/rewrite.load
Encore une fois, après avoir actualisé la page Web, le fichier error.log peut contenir l'erreur suivante:
[negotiation:error] [pid 4650] [client 127.0.0.1:46461] AH00687: Negotiation: discovered file(s) matching request: /var/www/html/web/test (None could be negotiated). (I was trying to access localhost/web/test.php using the url: localhost/web/test)
Pour résoudre ce problème, vous devez ajouter les lignes suivantes dans Apache2.conf:
<IfModule mod_mime.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .html
AddType application/x-httpd-php-source .phps
Maintenant, je peux accéder au fichier test.php en utilisant simplement le nom de fichier: test
Cette option créera des URL propres à SEO. Supprimer les extensions .php de l'URL visible et s'assurer que les URL auxquelles on accède sans le .php continueront d'afficher le fichier .php. Je suis incapable de trouver une autre réponse qui a réalisé ceci sur plusieurs threads.
N'oubliez pas d'activer le réécriture de mod. Sous Debian ou Unbuntu linux, ce qui suit fonctionnera
Sudo a2enmod réécrire
et
Service Sudo Apache2 redémarrer
Modifiez la section correspondante de votre fichier Apache2.conf comme suit.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
</Directory>
Si vous utilisez .htaccess pour réécrire, assurez-vous que ces options sont au moins activées dans Apache2.conf.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
RewriteEngine On
</Directory>
Enfin, sur certaines installations Apache, vous devrez peut-être également définir AllowOveride All
Dans un fichier .conf situé dans/etc/Apache2/sites-available ou/etc/Apache2/sites-enabled.
Il est supposé que la réécriture à partir du fichier Apache2.conf, par opposition à .htaccess, soit plus rapide.
Pour diriger quelques fichiers uniques, il peut être plus facile d’éviter le RewriteEngine.
J'ai utilisé ceci:
<Files $filename>
SetHandler application/x-httpd-php
</Files>
C'est moins puissant et moins flexible que la réécriture, mais probablement plus rapide et cela semble être la voie à suivre si vous souhaitez que quelques fichiers spécifiques soient gérés au format PHP.
Pour obtenir http://example.com/test link http://example.com/test.php use
RewriteEngine on
RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L]
Pour une raison quelconque, aucune autre solution ne fonctionnait correctement. Je mets cela dans un fichier .htaccess
à la racine de mon site. J'espère que cela fonctionnera pour vous.
RewriteEngine on #only use this once per .htaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
N'oubliez pas que si votre en-tête ou votre URL contient l'extension .php, elle ne sera pas supprimée. Vous aurez besoin de supprimer l'extension.
Utilisez ceci...
header 'location: /login';
plutôt que cela ...
header 'location: /login.php';