2013-03-16 6 views
2

Fondamentalement, j'ai l'htaccess ci-dessous. À la minute, cela fonctionne parfaitement, mais il redirige tous les fichiers. Par exemple foo.php à/foo quand je veux seulement rediriger about.php vers/about. Fondamentalement, je veux forcer l'extension .php à être supprimée pour about.php mais seulement ce fichier.RewriteRule pour un seul fichier

RewriteRule ^about$ about.php [L] 
RewriteCond %{REQUEST_URI} ^/about.php$ [NC] 
RewriteRule .* /about [R,L] 

Maintenant, j'ai le code ci-dessus. Il provoque maintenant un trop grand nombre d'erreurs de redirection.

Répondre

1

Je l'ai moi-même fixé.

RewriteCond %{THE_REQUEST} about.php 
RewriteRule (.*)\.php$ /$1 [L,R] 
RewriteRule ^about$ about.php [L] 
+0

Parfait !!!!!!!!! – Bee

0

Vous pouvez utiliser la règle de redirection pour ce faire, c'est vraiment simple. Le serveur envoie une redirection au client. Si le statut 301 est utilisé, ceci est particulièrement utile pour le référencement lors du déplacement d'un site.

Exemple de docs apache:

Redirect/Service http://foo2.example.com/service

+0

La directive de redirection dans ce document apache fait ce que vous voulez, il effectue une redirection 301. L'utilisateur se retrouve avec l'adresse cible dans l'emplacement de son navigateur. –

+0

Je n'utilise pas normalement les paramètres de requête, mais j'en ai juste essayé un et c'est le cas. Jetez un coup d'oeil à http://acvu.ca/2_about.html?foo=bar il redirige vers un site qa de moi et conserve les paramètres de requête. Je viens d'utiliser une simple redirection 301 ancienne nouvelle. –

3
RewriteRule ^about$ about.php [L] 

C'est votre bon rewrite, ce qui signifie qu'une demande de /about sera traitée comme si elle était une demande de /about.php: Pour ce numéro distinct:

Je ne veux pas l'utilisateur de voir about.php même s'il tape que

vous aurez besoin d'un redirigent/about.php-/about. C'est ce que votre deuxième et troisième ligne faire (RewriteRule avec [R] drapeau pour la redirection), mais la condition est une façon de large et contient aussi des trucs superfluent:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

Modifier à:

RewriteCond %{REQUEST_URI} ^/about.php$ [NC] 
RewriteRule .* /about [R,L] 

Est-ce que cela garde les paramètres GET?

Si vous ajoutez l'indicateur [QSA] (ajout de chaîne de requête), oui.

Mise à jour

Comme @PeterWooster a souligné, la partie de redirection peut être simplifiée:

Redirect /about.php /about 
+2

C'est génial si vous avez besoin de conditions et regex, mais la directive de redirection est conçue pour le cas d'utilisation du PO. –

+1

@PeterWooster vous avez totalement raison, j'étais trop partial par les règles d'origine, maintenant ils n'ont plus beaucoup de sens (même si ça marche). –

+0

Voir ma réponse il y a quelques minutes. Je l'utilise tout le temps pour les déplacements du site SEO. Mais la version basée sur la réécriture est agréable quand vous avez besoin de l'expression rationnelle. –