2010-09-22 3 views
1

Sur un serveur LAMP, je veux l'URL Sur un serveur LAMP, je souhaite que l'URL http://example.com/index.php soit réécrite sur http://example.com. Comment je fais ça?

http://example.com/index.php
être réécrites simplement
http://example.com

Mon fichier .htaccess actuel comme suit ...

IndexIgnore * 

ErrorDocument 400 /index.php?module=error&action=error 
ErrorDocument 401 /index.php?module=error&action=error 
ErrorDocument 403 /index.php?module=error&action=error 
ErrorDocument 404 /index.php?module=error&action=error 
ErrorDocument 500 /index.php?module=error&action=error 

RedirectMatch 301 ^/media/$/
RedirectMatch 301 ^/media/documents/$/
RedirectMatch 301 ^/media/graphics/$/
RedirectMatch 301 ^/media/photos/$/
RedirectMatch 301 ^/library/$/
RedirectMatch 301 ^/library/css/$/
RedirectMatch 301 ^/library/ht/$/
RedirectMatch 301 ^/library/js/$/
RedirectMatch 301 ^/library/php/$/

RewriteEngine on 
RewriteBase/

RewriteRule ^home$ /index.php?module=home&action=frontpage 
RewriteRule ^home/$ /index.php?module=home&action=frontpage 
RewriteRule ^home/([^/\.]+)$ /index.php?module=home&action=$1 
RewriteRule ^home/([^/\.]+)/$ /index.php?module=home&action=$1 

RewriteRule ^cv$ /index.php?module=home&action=cv 
RewriteRule ^cv/$ /index.php?module=home&action=cv 

RewriteRule ^release$ /index.php?module=release&action=release 
RewriteRule ^release/$ /index.php?module=release&action=release 

RewriteRule ^photos$ /index.php?module=gallery&action=album&album=general 
RewriteRule ^photos/$ /index.php?module=gallery&action=album&album=general 

RewriteRule ^gallery$ /index.php?module=gallery&action=album&album=general 
RewriteRule ^gallery/$ /index.php?module=gallery&action=album&album=general 
RewriteRule ^gallery/([^/\.]+)$ /index.php?module=gallery&action=album&album=$1 
RewriteRule ^gallery/([^/\.]+)/$ /index.php?module=gallery&action=album&album=$1 
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)$ /index.php?module=gallery&action=album&album=$1$&page=$2 
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/$ /index.php?module=gallery&action=album&album=$1$&page=$2 
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/([^/\.]+)$ /index.php?module=gallery&action=item&album=$1$&page=$2&item=$3 
RewriteRule ^gallery/([^/\.]+)/([^/\.]+)/([^/\.]+)/$ /index.php?module=gallery&action=item&album=$1$&page=$2&page=$3 

RewriteRule ^handouts$ /index.php?module=home&action=handouts 
RewriteRule ^handouts/$ /index.php?module=home&action=handouts 

RewriteRule ^links$ /index.php?module=home&action=links 
RewriteRule ^links/$ /index.php?module=home&action=links 

RewriteRule ^contact$ /index.php?module=home&action=contact 
RewriteRule ^contact/$ /index.php?module=home&action=contact 

RewriteRule ^login$ /index.php?module=authentication&action=login 
RewriteRule ^login/$ /index.php?module=authentication&action=login 
RewriteRule ^logout$ /index.php?module=authentication&action=logout 
RewriteRule ^logout/$ /index.php?module=authentication&action=logout 

RewriteRule ^copyright$ /index.php?module=home&action=copyright 
RewriteRule ^copyright/$ /index.php?module=home&action=copyright 

RewriteRule ^error$ /index.php?module=error&action=error 
RewriteRule ^error/$ /index.php?module=error&action=error 

Comment dois-je modifier mon fichier .htaccess pour accomplir cette réécriture de base? De plus, tout autre commentaire concernant mon code .htaccess serait grandement apprécié.

Merci d'avance!

+0

Je n'ai jamais vu un tel fichier .htaccess broussailleux dans ma vie. Êtes-vous vraiment écrit tout ce gâchis et ne savez pas comment ajouter cette règle de réécriture simple? –

+0

Je l'ai écrit, lol, mais j'ai des problèmes avec une erreur de redirection. Peut-être que c'est trop touffu! lol Des recommandations sur comment rendre le code plus efficace? – Drew2345

Répondre

0
RewriteRule ^/index.php$/

mais cela n'a pas de sens, comme / est susceptible de servir index.php. Si vous avez un fichier index.php dans votre répertoire et ne voulez pas le servir par défaut, c'est une configuration très étrange! mais possible bien sûr ... si vous avez spécifié différents DirectoryIndex dans votre configuration de serveur web.

peut-être que vous voulez redirigerindex.php à / ???

dans ce cas, vous pouvez mettre un RedirectMatch dans votre config comme RedirectMatch 301 ^/index.php$ / mais je recommande plutôt de le faire dans votre fichier php regarder directement à votre $_SERVER["REQUEST_URI]; mais cela est une question de style. Personnellement, j'aime avoir autant de contrôle dans ma demande, si possible, et se déplacer uniquement dans la configuration du serveur si son plus rapide ou nécessaire ...

EDIT:

après votre commentaire qui ce que vous avez besoin effacé en fait, je peux vous donner deux solutions.

Redirect/RedirectMatch ne fonctionnera pas car vous ne pouvez pas le faire de manière conditionnelle, où vous pouvez vérifier la demande réelle uri. En outre, l'URL finale sera utilisée pour la redirection. ce qui signifie APRES la redirection vers index.php par apache via la directive DirectoryIndex. donc ces méthodes ne seront pas en mesure de faire la différence entre / et .

donc vous devez le faire soit dans votre fichier php qui est

version 1:

voir si $_SERVER['REQUEST_URI'] se termine par index.php, cela ne se produira si elle en fait la demande (tapé dans la barre de navigation) . là, vous pouvez faire un redreict en utilisant header("Location: ...").

version 2:

utilisant mod rewrite qui est aussi capable de faire Redirections et peut le faire sur les conditions. inclus le configuratino que vous avez (DirectoryIndex) à des fins de démonstration. Vous avez seulement besoin de la ligne RewriteCond et RewriteRule.

DirectoryIndex index.php 

RewriteEngine On 
RewriteBase/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 
RewriteRule ^index\.php$ http://www.yourdomain.com/ [R=301,L] 

je ne suis pas sûr wheter il est possible de laisser votre domaine et il suffit de taper /, vous pouvez vérifier. ce ne sera que si l'URL de demande est réellement /index.php appliquer la réécriture qui effectue la redirection.

+0

Je pense que vous avez raison en ce que je cherche à Rediriger de index.php à/Cependant, en utilisant RedirectMatch 301 ^/index.php $/provoque une erreur de chargement de page de boucle de redirection. Des idées? – Drew2345

+0

oui, je vais l'ajouter à la réponse un instant ... –

+0

J'ai utilisé la version 2, et cela fonctionne parfaitement. Merci beaucoup! À noter, (1) la ligne DirectoryIndex index.php ne semble pas nécessaire, et (2) le remplacement de http://www.yourdomain.com/ avec simplement/semble fonctionner. – Drew2345

Questions connexes