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
.
-
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>?
- I j'aimerais qu'il force "www" avant chaque URL, donc ce n'est pas
domain.com
, maiswww.domain.com/page
. - 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?
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]
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 avechttp://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.
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]
le code suivant fonctionne très bien pour moi:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ .php
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 /
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
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
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
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>
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]
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
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