2011-02-05 6 views
1

Salut les gens @ stackoverflow,.htaccess RewriteRule ne fonctionne pas

Peut-être que j'ai une erreur fondamentale sur le fonctionnement de RewriteRule. Ou peut être pas. Néanmoins, j'essaie de comprendre cela maintenant pendant deux jours, sans aucun progrès.

Telle est la situation currrent:

J'ai un site Joomla avec SEF et mod_rewrite activé.

Il en résulte l'URL: mysite.com/index.php?option=com_remository & Itemid = 7

réécrite à être:

mysite.com/sub-directory/sub-directory/0000-business-fichiers/

ce sont les lignes qui sont actuellement utilisés dans mon .htaccess (tous Joomla standard)

Options +FollowSymLinks 
RewriteEngine On 

RewriteRule ^([^\-]*)\-(.*)$ $1 $2 [N] 

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR] 
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR] 
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 
RewriteRule ^(.*)$ index.php [F,L] 

# RewriteBase/


RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/index.php 
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC] 
RewriteRule (.*) index.php 

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 

C'est ce que je veux atteindre:

Lorsqu'un visiteur utilise cette URL répertoire mysite.com/sub/sous-répertoire/0000 fichiers commerciaux/

il devrait le conduire à la bonne page . Bien que je sache que ce n'est pas la meilleure idée d'utiliser des espaces dans une URL, je suis confronté au fait que ces URL «spacieuses» sont utilisées dans un PDF, qui a déjà été publié. Je pensais pouvoir utiliser mod_rewrite pour réécrire ces URL. Mais tout ce que je reçois est « page non trouvée »

J'ai ajouté cette règle au-dessus du fichier .htaccess:

RewriteRule ^([^\-]*)\-(.*)$ $1 $2 [N] 

Mais cela ne fonctionne pas. Qu'est-ce que je fais mal? Ou, aussi possible, ai-je manqué le point sur quand et comment utiliser mod_rewrite?

MFG, Eric

Répondre

0

Tout d'abord, le comportement par défaut de apache est généralement pour permettre les URL directes carte vers le système de fichiers sous-jacent (par rapport à la racine du document), et vous devez utiliser RewriteRule lorsque vous voulez travailler autour de ça. En regardant votre question, il semble que vous voulez parcourir le système de fichiers et donc vous devriez pas utiliser une RewriteRule.

Si mysite.com/sub+diretory/sub+directory/0000+Business+files/ ne fonctionne pas (sans votre règle), je me demande: avez-vous cette structure de répertoire sur votre serveur? C'est à dire. Est-ce que ça ressemble à ça?

[document root]/index.php 
[document root]/sub directory/sub directory/0000 Business files/ 

Sinon, je ne suis pas sûr que je comprends ce que vous essayez d'atteindre, et ce que vous entendez par le visiteur étant « conduire à la bonne page ». Pourriez-vous fournir un exemple d'URL fourni par l'utilisateur et l'URL correspondante (ou le chemin d'accès au système de fichiers) que vous souhaitez que l'utilisateur soit servi.

En ce qui concerne votre règle de réécriture, je ne suis même pas sûr que c'est autorisé, et je suis surpris que vous n'obteniez pas 500 Erreur interne du serveur. RewriteRule prend deux arguments (motif correspondant et substitution) et éventuellement des drapeaux, mais en raison de l'espace entre $ 1 et $ 2, vous fournissez trois arguments (+ drapeaux).

EDIT: J'ai mal le motif, mais cela n'a toujours pas beaucoup de sens. Il correspond à toute URL contenant au moins un tiret, puis sélectionne les parties avant et après le premier tiret. Donc, pour une URL comme "this-is-a-url-path/vers-un-fichier/sur le serveur", $ 1 serait "this" et $ 2 serait "is-a-url-path/to -un fichier/sur le serveur ". Encore une fois, si j'avais quelques exemples d'URL et leurs réécritures correspondantes, je pourrais vous aider à trouver le bon modèle. D'un autre côté, les espaces ne sont pas autorisés dans les URL, mais le navigateur et le serveur effectuent probablement un travail en arrière-plan, ce qui permet de récupérer correctement vos PDF.