2010-03-24 16 views
0

Je cours wamp sur Vista (Apache v2.2.11) et ai des projets d'installation tels que http://localhost/projectx est le répertoire de base pour projectx. Maintenant, je veux que les demandes deApache réécriture pour ajouter un répertoire à REQUEST_URI ne fonctionne pas sur localhost exécutant wamp

http://localhost/projectx/somepage/extra 

réécrira à

http://localhost/projectx/PUBLIC/somepage/extra 

À cette fin, j'ai un fichier dans C:\wamp\www\projectx\.htacces qui est ce simple:

RewriteEngine On 
RewriteBase /projectx 
RewriteCond %{REQUEST_URI} !^/PUBLIC 
RewriteRule ^(.*)$ /PUBLIC$1 [L] 

Je ne peux pas pour la vie de moi comprendre pourquoi cela ne fonctionne pas. L'erreur que j'obtiens est "L'URL demandée/PUBLIC n'a pas été trouvée sur ce serveur". Merci.

MISE À JOUR 25-MAR-2010:

Selon la solution de Michael I enlevé le chemin absolu. Pour une raison quelconque, je aussi besoin d'ajouter une barre oblique finale à la cond et la règle:

RewriteEngine On 
RewriteBase /projectx 
RewriteCond %{REQUEST_URI} !^/PUBLIC/ 
RewriteRule ^(.*)$ PUBLIC/$1 [L] 

Répondre

1

Essayez de changer ceci:

RewriteRule ^(.*)$ /PUBLIC$1 [L] 

à ceci:

RewriteRule ^(.*)$ PUBLIC$1 [L] 

Il est probablement l'absolu chemin qui est le problème.

Vous devez également modifier le $1 à zéro TELLE MANIERE RewriteRule ^(.*)$ PUBLIC$0 [L]

+0

Vous fixe (presque) fonctionne. Je suis un peu confus cependant, la première partie '^ (. *) $' Correspond à l'URI, mais la seconde partie avec un '/' à l'avant fait du remplacement un chemin absolu? Comment cela se rapporte alors à 'RewriteBase' quand il retourne le chemin de l'URI à son formulaire de pré-base? En outre, je n'obtiens aucune erreur pour '/ localhost/projectx /' et la page est transmise à '/ localhost/projectx/PUBLIC /', mais quand j'essaie '/ localhost/projectx/extra /' j'obtiens une erreur interne du serveur 500. Merci. –

+0

La base de réécriture est la base de votre expression régulière, mais le fichier de destination final pourrait se trouver dans un répertoire distinct, donc son chemin est relatif à l'emplacement du fichier .htaccess. – Michael

+0

Merci. Cela fait tellement plus de sens maintenant. De plus, votre solution fonctionne avec une addition mineure (voir la publication originale). –

0

devrait être

RewriteEngine On  
RewriteBase /projectx 
RewriteCond %{REQUEST_URI} !^/PUBLIC 
RewriteRule ^(.*)(PUBLIC)(.*)$ /projectx/PUBLIC$3 [L]