2010-02-08 5 views
0

J'utilise mod_rewrite pour créer des URL de référencement. Fondamentalement, la chose fonctionne de la façon suivante: toutes les demandes sont interceptées par .htaccess et redirigées vers un script PHP (disons transform.php). transform.php analyse l'URL SEO et la transforme en une URL normale, puis inclut index.php, puis récupère la sortie de l'application (index.php) et utilise RegEx pour convertir toutes les URL normales en URL de référencement. Donc l'étape essentielle est de faire passer toutes les demandes via transform.php. Mon .htaccess est plutôt long mais j'ai réussi à le limiter aux lignes suivantes..htaccess mod_rewrite a un résultat différent sur différents sites

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    RewriteEngine on 

    RewriteRule ^index\.php?(.*)$ ./transform.php?p=$1&%{QUERY_STRING} [L] 

</IfModule> 

Le problème se produit avec l'URL initiale (racine): http://mysite.com/. Lorsque je tape http://mysite.com/ et que le site est situé sur mon ordinateur local, tout fonctionne correctement. http://mysite.com/ est intercepté par .htaccess et envoyé à transform.php pour un traitement ultérieur. Cependant sur un autre serveur cette ligne ne fonctionne pas (disons http://mysite-other-server.com/). Cette ligne de .htaccess n'obtient simplement pas la demande. Tout fonctionne bien pour http://mysite-other-server.com/index.php cependant.

En outre, j'ai plusieurs sites sur ce second serveur et certains d'entre eux fonctionnent alors que d'autres ne le font pas. Il est comme pour certains d'entre eux l'URL est d'abord résolu à http://mysite-other-server.com/index.php puis traité par .htaccess alors que pour d'autres l'URL n'est pas résolu et traite .htaccess avec http://mysite-other-server.com/

Je suis très confus et essayé googler sans chance. Toute aide est grandement appréciée.

Répondre

1

Je suppose qu'Apache est configuré pour ne pas accepter les fichiers .htacces.

Vous devez l'activer depuis la configuration httpd avec le paramètre AllowOverride.

http://httpd.apache.org/docs/2.0/mod/core.html#allowoverride

Une autre possibilité est que le serveur de production n'a pas chargé mod_rewrite, vérifier les directives LoadModule pour cela.

+0

Salut et merci pour votre réponse! Le serveur accepte définitivement les fichiers .htaccess car http://mysite-other-server.com/index.php fonctionne comme prévu. La même chose vaut pour mod_rewrite. Cependant, pour une raison quelconque, http://mysite-other-server.com/ ne produit pas le même résultat. Il va toujours dans le fichier .htaccess cependant RewriteRule^index \ .php? (. *) $ .... n'a aucun effet. Alors que sur d'autres sites sur ce même serveur RewriteRule^index \ .php? (. *) $ .... fonctionne très bien pour http://mysite-other-server.com/ – Eugene

+0

Donc, pour trier les choses: http: //mysite-other-server.com/ et http://mysite-other-server123.com/ sont sur le même serveur. Le même fichier .htaccess et transform.php sont utilisés pour les deux. Les deux http://mysite-other-server123.com/ et http://mysite-other-server123.com/index.php correspondent à cette expression rationnelle et vont dans transform.php Mais seulement http: // mysite-other -server.com/index.php est apparié alors que http://mysite-other-server.com/ ne l'est pas. – Eugene

+0

Attention, la directive AllowOverride peut être définie sur un VirtualHost spécifique, permettant à un seul Apache d'avoir un domaine en fonctionnement et l'autre pas. – Johnco

Questions connexes