2010-01-22 6 views
2

J'ai quelques règles de réécriture dans htaccess. Ils travaillent sur un serveur mais pas sur un autre. Mon script est la suivante (je l'ai fait remarquer comment les urls regarder):Variables RewriteRule vides

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_URI} !^/images/ 

#example.com/regions/fife/ 
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L] 

#example.com/regions/fife/dunfermline 
RewriteRule ^regions/([^/]+)/([^/]+)$ /regions.php?region=$1&town=$2 [L] 

Il retourne deux variables (région & ville) Je peux manipuler en PHP, et jeter le contenu approprié. J'ai un serveur Rackspace, et le script fonctionne parfaitement, mais sur un autre serveur (Freedom2surf) il ne fonctionne que jusqu'à présent. Cela ne retourne pas les variables. Je reçois un tableau $ _GET vide ...

Des idées? F2S ne me donne aucun indice, juste que je devrais vérifier mon code. Mais si cela fonctionne sur un autre serveur, alors qu'est-ce qui donne? Est-ce un réglage Apache différent?

+0

Êtes-vous sûr mod_rewrite est activé sur le nouvel hôte? Quelle est l'URL que vous recevez dans votre script ($ _SERVER ['REQUEST_URI'])? –

+0

Mon hôte dit qu'ils ont mod_rewrite activé, et je vois ceci: $ _SERVER ['REQUEST_URI'] =/regions/fife/dunfermline Si cela ne fonctionnait pas, alors je suppose que je verrais juste une page d'erreur 404 ? Mais cela m'amène en fait à regions.php, sans afficher les variables. – WastedSpace

+0

Avez-vous déjà résolu ce problème? Je suis le même en ce moment. – Kokos

Répondre

0

Je pense que vous pouvez être après le drapeau « QSA », qui ajoutera la chaîne de requête de la demande initiale à la demande redirigée, par exemple:

#example.com/regions/fife/ 
RewriteRule ^regions/([A-Za-z0-9\-\+\']+)/?$ /regions.php?region=$1 [L,QSA] 
0

Cela sonne comme vous avez un conflit mod_negotiation ici et vous devez activer Multiviews off. Parfois, les configurations par défaut d'Apache sont Multiviews activées par défaut. Qu'est-ce que cela fait, c'est qu'il va regarder une demande, disons, /regions/1234 et mod_negotiation remarquera qu'il existe un fichier /regions.php et supposons que la demande est en fait pour ce fichier php. Il va donc servir /regions.php/1234 et contourner complètement mod_rewrite. Vous pouvez utiliser Options pour l'éteindre. Il suffit d'ajouter ceci au début de votre fichier htaccess:

Options -Multiviews