2017-10-15 26 views
2

J'utilise .htaccess pour la première fois et je rencontre un problème de boucle. Je suis en train de réaliser les objectifs suivants:.htaccess réécrire chaque requête à index.php

  1. http://something.com à réécritures http://something.com/main

  2. http://something.com/anything à réécritures http://something.com/index.php?page=anything

Jusqu'à présent, ma tentative actuelle ressemble à ceci, qui fonctionne de façon satisfaisante:

RewriteEngine on 
RewriteBase/

RewriteRule ^/?$ /main [L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.*)$ /index.php?page=$1 [NC,L] 

Cependant, je voudrais supprimer les deux conditions de réécriture pour permettre également aux demandes http://something.com/index.php de devenir http://something.com/index.php?page=index.php. La suppression des deux lignes RewriteCond entraîne une boucle et la réécriture ne fonctionne pas.

Qu'est-ce que je fais de mal et comment puis-je résoudre le problème? Merci!

Répondre

1

Vous pouvez supprimer ces conditions, mais vous devez inverser vos règles et retirer menant / de URIs cibles:

RewriteEngine on 
RewriteBase/

RewriteRule ^(.+)$ index.php?page=$1 [QSA,L] 

RewriteRule ^/?$ main [L] 

Rappelez-vous aussi que maintenant votre première règle sera également réécrire css/js/demandes d'images à index.php?page=... . Si vous voulez éviter cela, alors ajoutez cette condition avant la première RewriteRule:

RewriteCond %{REQUEST_URI} !\.(?:jpe?g|gif|bmp|png|ico|tiff|css|js)$ [NC] 
+0

Merci! Cela fonctionne exactement comme je le veux. La réécriture concerne une application Web qui charge dynamiquement le contenu d'un CDN externe. Le comportement prévu est que tout passe par 'index.php' dans ce cas. –