2010-05-08 3 views
0

J'ai récemment à utiliser un remaniée avec des segments d'URL applications CodeIgniter existant au lieu de chaînes de requête, et je suis l'aide d'un rewriterule dans htaccess pour réécrire des choses à index.php:Envoyer 404 lorsque vous demandez index.php via .htaccess?

RewriteRule ^(.*)$ /index.php/$1 [L] 

Mon problème est en ce moment que beaucoup de pages de ce site sont indexées par google avec un lien vers index.php. Depuis que j'ai fait le changement pour utiliser les segments d'URL à la place, je ne me soucie plus de ces résultats google et je veux envoyer un 404 (pas besoin d'utiliser 301 Move en permanence, il y a eu assez de changements, il faudra juste tout).

Pour en savoir plus: Comment rediriger les demandes vers /index.php?whatever à une page 404? Je pensais à réécrire dans un fichier inexistant qui ferait envoyer un 404 par Apache. Serait-ce une solution acceptable? Comment la réécriture pourrait-elle ressembler?

modifier:
Actuellement, les résultats de Google existants vont simplement provoquer l'erreur suivante:

An Error Was Encountered

The URI you submitted has disallowed characters.

J'ai essayé quelque chose comme:

RewriteRule ^index\.php?(.*)$ /no-exist.html [R=404,L] 

Mais il a provoqué une erreur de serveur interne.

EDIT2:

CodeIgniter est déjà l'envoi d'erreurs '400', sera-ce suffisant pour obtenir mes pages supprimées de Google?

Répondre

2

Le drapeau R[=code] de RewriteRule permet code uniquement de la plage 300-400.

Ne pas utiliser rediriger R drapeau - juste essayer de réécrire une page sans intérêt:

MISE À JOUR: Deux sont réoriente les uns aux autres apposés - utiliser RewriteCond s pour échapper à l'ingérence.

complet .htaccess:

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/index.php.* 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ /no-exist.html [L] 

RewriteCond %{REQUEST_URI} !^/index.php.* 
RewriteCond %{REQUEST_URI} !^/no-exist.html.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 

Remarque: /no-exist.html n'existe pas actuellement. Supposons, cela vous aidera.

+0

ne fonctionne pas, encore une erreur interne du serveur. –

+0

J'ai trouvé le problème: l'instruction slash/in '/ no-exists.html' ne devrait pas être ici (juste' no-exists.html').J'ai corrigé ma réponse. Testé - ça fonctionne. –

+0

Ce slash fonctionne bien pour mon autre réécriture ... Inutile de dire que cela entraîne toujours une erreur interne du serveur. Peut-être que les 2 réécritures ne vont pas bien ensemble. –

1

Il y a un code d'état HTTP spécial 410 GONE pour dire le monde pour supprimer la ressource: La ressource demandée /index.php est plus disponible sur ce serveur et il n'y a pas d'adresse. Veuillez supprimer toutes les références à cette ressource.

Pour envoyer ce code utilisation [G|gone] drapeau en règle de réécriture:

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/index.php.* 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$/[G,L] 

RewriteCond %{REQUEST_URI} !^/index.php.* 
RewriteRule ^(.*)$ /index.php/$1 [L] 
Questions connexes