web-dev-qa-db-fra.com

htaccess retire index.php de l'URL

J'ai un problème en raison duquel Google a indexé certaines pages avec la mauvaise URL.

L'URL qu'ils indexent est:

http://www.example.com/index.php/section1/section2

J'en ai besoin pour rediriger vers:

http://www.example.com/section1/section2

.htaccess n'est pas mon fort, donc toute aide serait très appréciée.

Merci d'avance.

41
Nick

C'est la règle de base pour masquer index.php de l'URL. Mettez ceci dans votre fichier racine .htaccess.

mod_rewrite doit être activé avec PHP et cela fonctionnera pour la version PHP supérieure à 5.2.6.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
56
Shakti Singh

Pour supprimer index.php de l'URL et rediriger le visiteur vers la version non-index.php de la page:

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

Cela redirigera proprement /index.php/myblog vers simplement /myblog.

L'utilisation d'une redirection 301 préservera le classement dans les moteurs de recherche Google.

41
Bradley Flood
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?)
RewriteRule ^ /%1 [R=301,L]
17
Steve Bals

En supposant que l'URL existante est 

http://example.com/index.php/foo/bar

et nous voulons le convertir en

 http://example.com/foo/bar

Vous pouvez utiliser la règle suivante:

RewriteEngine on
#1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC]
RewriteRule ^ /%1 [NE,L,R]
#2)internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]

Dans le spep # 1, nous comparons d'abord la chaîne de requête et capturons tout après le /index.php/ et la valeur capturée est enregistrée dans% 1 var. Nous envoyons ensuite le navigateur à une nouvelle URL . Le n ° 2 traite la demande en interne. Lorsque le navigateur arrive à/foo/bar , # 2rule réécrit la nouvelle URL dans la position originale.

8
starkeen

Suivez les étapes suivantes

1. Assurez-vous que le module d'hébergement/votre ordinateur mod_rewrite est actif. s'il n'est pas actif, essayez de l'activer en quelque sorte, ouvrez le fichier httpd.conf. Vous pouvez vérifier cela dans le phpinfo.php pour le savoir.

changer ce réglage:

#LoadModule rewrite_module modules/mod_rewrite.so

être et redémarrer wamp

LoadModule rewrite_module modules/mod_rewrite.so

2. Ensuite, allez dans le fichier .htaccess, et essayez de modifier pour être:

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

Si ce qui précède ne fonctionne pas, essayez avec:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

3. Déplace le fichier .htaccess vers le répertoire racine, où se trouve index.php.

www OR root folder
- index.php
- .htaccess
4
Kailas

Des mesures pour supprimer index.php de l'URL de votre site web wordpress.

  1. Vérifiez que mod_rewrite doit être activé sur votre serveur. Pour vérifier s’il est activé ou non - Créez un fichier phpinfo.php dans votre dossier racine avec la commande ci-dessous.
  <?php
    phpinfo?();
  ?>

Exécutez maintenant ce fichier - www.votresite.com/phpinfo.php et il affichera mod_rewrite dans la section Charger les modules . Si non activé, exécutez les commandes ci-dessous sur votre terminal. 

Sudo a2enmod rewrite
Sudo service Apache2 restart
  1. Assurez-vous que votre .htaccess existe dans votre dossier racine WordPress, sinon créez un fichier .htaccess Collez ce code dans votre fichier .htaccess: - 
 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
  1. Faites ensuite en sorte que .htaccess reçoive l’autorisation 666 pour qu’elle devienne accessible en écriture et que vous puissiez maintenant modifier votre permalien wordpress. 

  2. Maintenant, allez dans Paramètres -> permaliens -> et passez au format d’URL souhaité. Supprimez ce code /index.php/%year%/%monthnum%/%day%/%postname%/et insérez ce code dans la structure personnalisée: /% postname% / 

  3. Si toujours pas réussi alors vérifiez votre hébergement, le mien était serveur digitalocean, donc je l'ai effacé moi-même

Edité le fichier /etc/Apache2/sites-enabled/000-default.conf

Ajout de cette ligne après DocumentRoot/var/www/html

    <Directory /var/www/html>
    AllowOverride All
    </Directory>

Redémarrez votre serveur Apache

Remarque:/var/www/html sera la racine de votre document 

2
kandysingh

Cela fonctionnera, utilisez le code suivant dans le fichier .htaccess RewriteEngine On

# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|Apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]

0
Talib Ali

Certains peuvent obtenir un 403 avec la méthode indiquée ci-dessus à l'aide de mod_rewrite. Une autre solution pour rewite index.php out est la suivante:

<IfModule mod_rewrite.c> 

RewriteEngine On

# Put your installation directory here:
RewriteBase /

# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule> 
0
toystory