2009-06-30 6 views
0

J'ai un ensemble de RewriteRules dans .htaccess à des fins de référencement. Exemple ...Pourquoi un trait d'union dans une RewriteRule se brise-t-il dans un sous-dossier

RewriteEngine On 
RewriteRule ^signup$ /signup.php 
RewriteRule ^account$ /account.php 
RewriteRule ^logout$ /logout.php 
RewriteRule ^login$ /login.php 
RewriteRule ^recent-questions$ /recent.php 
RewriteRule ^popular-questions$ /popular.php 
... 
... 
(more similar stuff) 
... 
... 
RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$1&id=$2&%{QUERY_STRING} 
RewriteRule ^([-_~*a-zA-Z0-9]+)(\/)?$ categories.php?key=$1 

Le système se trouve dans un sous-dossier "ask" sur le serveur.

Ils fonctionnent très bien si je Mappez le dossier à http://ask.mydomain.com

Mais je ne veux pas utiliser un sous-domaine depuis que je suis l'ajout d'un en-tête existant & pied géré par d'autres personnes qui partagent resouces et contient liens relatifs avec le principal www. site Internet.

Lorsque j'essaie d'accéder au dossier via http://www.mydomain.com/ask les RewriteRules avec des tirets dans les résultats dans 404 erreurs - les autres continuent à fonctionner.

J'ai déjà essayé d'échapper les tirets comme - et% 2D. Le premier n'a fait aucune différence. Ce dernier me conduit à une page complètement incorrecte.

Répondre

1

Solution - Il n'a pas été les traits d'union du tout. C'était parce que MultiViews était activé pour www. domaines, mais pas pour demander. domaines

/inscription mapperait à /signup.php avec le comportement par défaut de MultViews,

mais

/récente question ne correspond pas à recent.php

Sous la demande. sous-domaine l'URL réécrit dans .htaccess où être traité correctement. Mais MultiViews le cassait sous le www. domaine.

0

Pour moi, vous semblez remplacer par les mauvais groupes:

RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$2&id=$3&%{QUERY_STRING} 

devrait faire si je comprends bien que vos URLS ont la forme mydomain.com/bla/title|id

+0

Les règles de réécriture se trouvent dans un fichier .htaccess dans le dossier ask, sans application de RewriteBase, de sorte qu'elles "dépouillent le répertoire local avant le traitement" (comme documenté ici: http://httpd.apache.org/docs/2.0 /mod/mod_rewrite.html#rewritebase) J'ai tout de même essayé votre suggestion, le résultat étant toujours 404 pour les liens gênants. – rwired

+0

Même si (. *) Ne correspond à rien, c'est toujours un groupe, donc $ 2 et $ 3 devraient être corrects. D'un autre côté: êtes-vous sûr qu'au moment de l'application de la RewriteRule, la chaîne a encore une barre oblique avant title | id? Sinon, il ne sera pas apparié. BTW: Notez que je ne suis pas un gourou .htaccess, donc je pourrais faire de mauvaises hypothèses partout. – balpha

Questions connexes