2012-11-28 2 views
3

J'ai créé un ensemble de RewriteRules pour mon site Web et n'ai eu aucun problème avec eux sur ma configuration locale. Voici un extrait de mon .htaccess:RewriteRule redirige vers un chemin absolu, plutôt que l'URL correcte

Options +FollowSymLinks -MultiViews 
RewriteEngine On 
RewriteRule ^news/?$ news.php [L] 

Localement, quand je visite 127.0.0.1/news, il redirige correctement news.php et masque l'URL. Je viens de mettre à jour le fichier .htaccess sur le serveur distant et recevoir cette erreur, en essayant de visiter l'exemple ci-dessus:

L'URL demandée /mnt/target02/123456/123456/www.mywebsite.com/web/content /news.php n'a pas été trouvé sur ce serveur.

J'ai essayé de changer la règle à ceci:

RewriteRule ^news/?$ http://www.mywebsite.com/news.php [L] 

et la page se charge correctement. Cependant, la barre d'adresse affiche news.php, plutôt que des nouvelles. Y at-il quelque chose qui me manque, ou suis-je coincé avec l'adresse laide (et moins sûre)? Merci!

+1

est ce répertoire 'web/content' votre racine de document? –

+0

Oui. web/content est la racine du document. –

+0

essayez une barre oblique avant news.php comme /news.php [L]. Aussi ce qui vous fait penser ne pas avoir une extension .php le rend plus sûr? Si vous essayez de cacher le fait que votre serveur est PHP il y a beaucoup d'autres façons de le découvrir .... – WebChemist

Répondre

0

Avez-vous essayé d'ajouter une barre oblique à l'URL de destination, par ex.

RewriteRule^Nouvelles /? /news.php $ [L]

1

Si vous êtes comme moi, vous essayez d'éviter d'ajouter barres obliques à votre URL de substitution (la nouvelle destination) afin que votre même fichier peut .htaccess travaillez avec vos serveurs de test et de production. J'ai eu le même problème que vous rencontrez et tout ce qui était nécessaire était de mettre:

RewriteBase/

Ceci indique mod_rewrite baser les URL de substitution hors de la racine web plutôt que la racine de fichier. Un autre conseil, si vous devez rediriger vers le niveau supérieur de la destination, utilisez ./ au lieu de seulement /. Mon serveur de test a un port (8080) et n'est pas à la racine (donc il a un RewriteBase non vide de /site1/), et la plupart des exemples de règles de réécriture sur le web ne prennent pas en compte ce cas. Si vos substitutions ne commencent jamais par une barre oblique, vous pouvez utiliser le même fichier .htaccess sur votre serveur de test et votre serveur actif, et tout ce que vous devez modifier est la valeur RewriteBase, plutôt que de mettre à jour chaque règle.

Questions connexes