Supprimer.extension php.htaccess

Oui, J'ai lu le manuel Apache et j'ai cherché ici. Pour une raison que je ne peut tout simplement pas obtenir que cela fonctionne. Le plus proche que je suis venu est d'avoir supprimer l'extension, mais il pointe vers le répertoire racine. Je veux que cela fonctionne dans le répertoire qui contient le fichier .htaccess .

je dois faire trois choses avec le fichier .htaccess .

  1. j'en ai besoin pour supprimer le .151970920 php"

    un. J' ont plusieurs pages qui utilisent des onglets et le URL ressemble à la page.php#tab - est-ce possible?

    B. J'ai une page qui utilise un ID de session ajouté à L'URL pour m'assurer que vous venez du bon endroit, www.domain.com/download-software.php?abcdefg .

est-ce possible? Aussi en faisant cela, dois-je enlever ".php" des liens dans mon header nav inclure le fichier? Devrait IE "<a href="support.php">support</a>" be <a href="support">support</a>?

  1. I j'aimerais qu'il force "www" avant chaque URL, donc ce n'est pas domain.com , mais www.domain.com/page .
  2. je voudrais supprimer toutes les barres obliques de pages.

je vais continuer à chercher, d'essayer, etc. Serait d'être dans un sous répertoire de causer des problèmes?

78
demandé sur Peter Mortensen 2010-10-26 21:01:43

12 réponses

Gumbo de réponse dans le Débordement de la Pile question Comment masquer la .l'extension html avec Apache mod_rewrite devrait fonctionner correctement.

Re 1) modifier le .code html pour .151980920 php"

Re a.) Yup, c'est possible, il suffit d'ajouter #tab à L'URL.

Re B.) C'est possible en utilisant QSA (chaîne de requête Ajouter), Voir ci-dessous.

ce devrait fonctionne aussi dans un chemin de sous-répertoire:

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [QSA,L]
95
répondu Pekka 웃 2017-11-22 13:48:21

Apache mod_rewrite

ce que vous cherchez est mod_rewrite ,

Description: fournit un moteur de réécriture basé sur des règles pour réécrire URLs demandées à la volée.

de manière générale, mod_rewrite fonctionne en faisant correspondre le document demandé avec des expressions régulières spécifiées, puis effectue des réécritures D'URL en interne (dans le cadre du processus apache) ou à l'externe (dans le navigateur client). Ces réécritures peuvent être aussi simples que la traduction interne example.com/foo dans une demande de example.com/foo/bar.

Les Docs Apache incluent un guide mod_rewrite et je pense que certaines des choses que vous voulez faire sont couvertes dans celui-ci. guide détaillé de mod_rewrite .

forcer le www sous-domaine

je voudrais qu'il force" www " avant chaque url, donc ce n'est pas domain.com mais www.domain.com/page

le guide de réécriture comprend des instructions à cet égard dans l'exemple nom D'hôte canonique .

enlever les barres obliques (Partie 1)

je voudrais supprimer toutes les barres obliques des pages

Je ne suis pas sûr pourquoi vous voudriez faire ceci comme le guide de réécriture inclut un exemple pour l'exact opposé , c.-à-d., toujours comprenant une barre oblique de queue. Les documents suggèrent que l'élimination de la barre oblique arrière a un grand potentiel de causer des problèmes:

Problème De Slash Arrière

Description:

Chaque webmaster peut chanter une chanson sur le problème de la fuite slash sur les URLs référençant les répertoires. Si elles sont manquantes, le serveur déverse une erreur, parce que si vous dites /~quux/foo au lieu de /~quux/foo/ puis, le serveur recherche un fichier nommé foo. Et parce que ce dossier est un répertoire, il se plaint. En fait, il essaie de le fixer lui-même dans la plupart des cas, mais parfois ce mécanisme doivent être émulé par vous. Par exemple, après avoir fait beaucoup D'URL compliquées réécriture de scripts CGI, etc.

peut-être pourriez-vous expliquer pourquoi vous voulez supprimer le slash arrière tout le temps?

Supprimer .php extension

j'en ai besoin pour enlever le .php

la chose la plus proche à faire cela que je peux penser est de réécrire en interne chaque document de requête avec un .PHP extension, i.e., example.com/somepage est plutôt traitée comme une demande de example.com/somepage.php. Il est à noter que si l'on procède de cette façon, il faudrait que chaque suintement existe réellement comme suit: somepage.php sur le système de fichiers.

Avec la bonne combinaison d'expressions régulières, cela devrait être possible, dans une certaine mesure. Cependant, je peux prévoir certains problèmes possibles avec les pages d'index qui ne sont pas demandées correctement et qui ne correspondent pas aux répertoires correctement.

par exemple, cela va réécrire correctement example.com/test en tant que demande example.com/test.php:

RewriteEngine  on
RewriteRule ^(.*)$ .php

mais fera example.com ne pas charger parce qu'il n'y a pas example.com/.php

je vais deviner que si vous supprimez tous les slashs, alors choisir une requête pour un index de répertoire à partir d'une requête pour un nom de fichier dans le répertoire parent deviendra presque impossible. Comment déterminer une requête pour le répertoire 'foobar':

example.com/foobar

à partir d'une requête pour un fichier appelé foobar (qui est en fait foobar.php)

example.com/foobar

ça pourrait être possible si vous avez utilisé la directive RewriteBase . Mais si vous faites cela, alors ce problème devient beaucoup plus compliqué car vous allez avoir besoin des directives RewriteCond pour vérifier le niveau du système de fichiers si la requête correspond à un répertoire ou à un fichier.

cela dit, si vous supprimez votre exigence de supprimer toutes les barres obliques traînantes et à la place de forcer-ajouter les barres obliques traînantes le" non .le problème de l'extension php devient un peu plus raisonnable.

# Turn on the rewrite engine
RewriteEngine  on
# If the request doesn't end in .php (Case insensitive) continue processing rules
RewriteCond %{REQUEST_URI} !\.php$ [NC]
# If the request doesn't end in a slash continue processing the rules
RewriteCond %{REQUEST_URI} [^/]$
# Rewrite the request with a .php extension. L means this is the 'Last' rule
RewriteRule ^(.*)$ .php [L]

ce n'est toujours pas parfait -- chaque demande pour un fichier a toujours .php joint à la demande en interne. Une demande de " salut.txt 'va mettre ceci dans vos journaux d'erreurs:

[Tue Oct 26 18:12:52 2010] [error] [client 71.61.190.56] script '/var/www/test.peopleareducks.com/rewrite/hi.txt.php' not found or unable to stat

mais il y a une autre option, mettez les directives DefaultType et DirectoryIndex comme ceci:

DefaultType application/x-httpd-php
DirectoryIndex index.php index.html

mise à jour 2013-11-14-Correction de l'extrait ci-dessus à incorporer l'observation de nicorellius

demande maintenant hi.txt (et tout le reste) sont réussies, les demandes de example.com/test retournera la version de test traitée.php, et l'index.les fichiers php fonctionneront à nouveau.

je dois donner crédit où le crédit est dû pour cette solution que je l'ai trouvé Michael J. Radwins Blog en recherchant Google pour php aucune extension apache .

Supprimer les barres obliques

quelques recherches pour apache remove trailing slashes m'ont amené à quelques pages D'optimisation de moteur de recherche. Apparemment, certains systèmes de gestion de contenu (Drupal dans ce cas-ci) vont rendre le contenu disponible avec et sans slash dans les URls, ce qui dans le monde SEO fera que votre site encourra une pénalité de contenu dupliqué. Source

la solution semble assez triviale, en utilisant mod_rewrite nous réécrivons à la condition que la ressource demandée se termine par un / et réécrivons l'URL en-tête HTTP 301 Permanent Redirect .

voici son exemple qui suppose que votre domaine est blamcast.net et permet à la requête d'être préfixée optionnellement avec www. .

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?blamcast\.net$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]

maintenant, on avance. Mettons tout ça ensemble et voyons à quoi ça ressemble.

Obligatoire www. , pas de .php , et pas de barres obliques

cela suppose que le domaine est foobar.com et il fonctionne sur le port standard 80.

# Process all files as PHP by default
DefaultType application/x-httpd-php
# Fix sub-directory requests by allowing 'index' as a DirectoryIndex value
DirectoryIndex index index.html

# Force the domain to load with the www subdomain prefix
# If the request doesn't start with www...
RewriteCond %{HTTP_HOST}   !^www\.foobar\.com [NC]
# And the site name isn't empty
RewriteCond %{HTTP_HOST}   !^$
# Finally rewrite the request: end of rules, don't escape the output, and force a 301 redirect
RewriteRule ^/?(.*)         http://www.foobar.com/ [L,R,NE]

#get rid of trailing slashes
RewriteCond %{HTTP_HOST} ^(www.)?foobar\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]

le drapeau " R "est décrit dans la section RewriteRule de la directive. Extrait:

redirect|R [=code] (force de redirection) substitution de préfixe avec http://thishost[:thisport]/ (qui rend la nouvelle URL URI) à force une redirection externe. Si aucun code N'est donné, une réponse HTTP de 302 ( déplacé temporairement ) sera retourné.

Note Finale

Je n'ai pas été capable d'obtenir le déplacement de la barre pour travailler avec succès. La redirection a fini par me donner des boucles infinies de redirection. Après avoir lu la solution originale plus proche, j'ai l'impression que l'exemple ci-dessus fonctionne pour eux en raison de la façon dont leur installation Drupal est configurée. Il mentionne spécifiquement:

sur un site Drupal normal, avec des URLs propres activées, ces deux adresses sont essentiellement interchangeables

en référence aux URL se terminant par et sans barre oblique. En outre,

Drupal utilise un fichier appelé .htaccess pour indiquer à votre serveur web comment gérer les Url. C'est le même fichier qui permet L'URL propre de Drupal magie. En ajoutant une simple commande de redirection au début de votre .htaccess , vous pouvez forcer le serveur à supprimer automatiquement slash.

64
répondu Tim Bielawa 2014-08-09 06:43:18

en plus des autres réponses ci-dessus,

vous pouvez également essayer ce pour supprimer .extensions php complètement à partir de votre fichier et pour éviter boucle infinie :

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [NC,L]

ce code fonctionnera dans Root/.htaccess, Assurez-vous de changer la base de réécriture si vous voulez la placer dans un fichier htaccess dans le sous-répertoire.

Edit:

sur apache 2.4 et plus tard, vous pouvez également utiliser la fin drapeau pour prévenir l'erreur de boucle infinie. L'exemple suivant fonctionne comme ci-dessus sur apache 2.4,

RewriteEngine on

RewriteRule ^(.+)\.php$ / [R,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /.php [NC,END]
35
répondu starkeen 2016-04-24 15:50:52

le code suivant fonctionne très bien pour moi:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ .php
19
répondu user1079877 2013-11-10 11:46:20

Voici une méthode si vous voulez le faire pour juste un fichier spécifique:

RewriteRule ^about$ about.php [L]

Réf: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls /

12
répondu Susan 2014-03-06 07:25:09

après avoir changé le paramètre AllowOverride de None en All dans /etc/apache2/apache2.conf (Debian 8), après ce , le .le fichier htaccess doit juste contenir:

Options +MultiViews
AddHandler php5-script php
AddType text/html php

et il suffisait de se cacher .extension php à partir des fichiers

7
répondu Rodney Salcedo 2016-04-22 05:14:58

Je ne sais pas pourquoi les autres réponses n'ont pas fonctionné pour moi mais ce code que j'ai trouvé a fait:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]

C'est tout ce qui est dans mon htaccess et example.com/page les spectacles example.com/page.php

3
répondu Jon 2014-03-20 05:12:04

pour supprimer le .l'extension php à partir D'un fichier PHP par exemple yoursite.com/about.php pour yoursite.com/about suivez cette étape . Ouvrir. htaccess (créer un nouveau fichier s'il n'existe pas) à partir de la racine de votre site web, et ajouter le code suivant.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]

pour supprimer le .extension html à partir d'un fichier html par exemple yoursite.com/about.html pour yoursite.com/about suivez cette étape .

ouvert .htaccess (en créer un nouveau s'il n'existe pas) votre site web, et ajouter le code suivant.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .html [NC,L]

référence: Comment supprimer L'extension php de L'URL

3
répondu Sanjeev Kumar 2015-07-19 11:43:34

si vous codez en PHP et que vous voulez supprimer .php pour que vous puissiez avoir une URL comme:

http://yourdomain.com/blah - > ce qui indique /blah.php

C'est tout ce dont vous avez besoin:

<IfModule mod_rewrite.c>
    RewriteRule ^(.+)/$ http://%{HTTP_HOST}/ [R=301,L]
</IfModule>
2
répondu Jeff Hays 2014-05-31 17:33:27

si votre url en PHP comme http://yourdomain.com/demo.php que vient comme http://yourdomain.com/demo

C'est tout ce dont vous avez besoin:

créer Fichier .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^([^\.]+)$ .html [NC,L]
RewriteRule ^([^\.]+)$ .php [NC,L]
1
répondu Kamlesh 2015-01-07 12:23:03

j'ai trouvé 100% concept de travail pour moi:

# Options is required by Many Hosting
Options +MultiViews

RewriteEngine on

# For .php & .html URL's:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ .php [NC,L]
RewriteRule ^([^\.]+)$ .html [NC,L]

utilisez ce code dans la racine de votre site web .fichier htaccess comme:

offline-wamp\www\YourWebDir

"151910920 en ligne" public_html/

si cela ne fonctionne pas correctement, alors changez les paramètres de votre Wamp Serveur: 1) clic gauche sur l'icône WAMP 2) Apache 3) Apache Modules 4) gauche cliquez sur rewrite_module

1
répondu Irshad Khan 2016-03-30 08:49:42

voici le code que j'ai utilisé pour cacher l'extension .php du nom du fichier:

## hide .php extension
# To redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L,NC]

Note: R=301 est pour la redirection permanente et est recommandé à utiliser pour le référencement. Cependant, si l'on veut juste une redirection temporaire, remplacez - la par juste R

1
répondu Rahul Gupta 2017-02-22 05:47:20