web-dev-qa-db-fra.com

Comment configurer mod_rewrite / htaccess pour masquer les URL et les transférer dans un sous-répertoire?

Cela fait environ trois ans que je joue avec Apache et php (j'utilise mince et nignx;). J'ai donc oublié comment configurer une directive mod_rewrite pour transférer toutes les demandes http de la racine vers le dossier installé de l'application.

Configuration actuelle et restrictions:

  • Le site se trouve sur un service d'hébergement partagé cpanel qui n'autorise pas l'installation d'applications en tant que root (cette fonctionnalité ne constitue pas un bogue dans mon livre pour le contrôle de version et tout le reste).
  • L'application CMS a été installée sous joomla-1.5.60 /
  • J'ai besoin de configurer /(.*) pour rediriger vers /joomla-1.5.60/$1 mais regardez quand même le navigateur en tant que /(.*)
  • RedirectMatch ne fonctionne pas
  • Je ne peux pas établir docroot en tant que racine de l'application en raison de restrictions de compte.

J'ai lu la documentation d'Apache et je continue à avoir une boucle de redirection. Donc, toute aide que vous pourriez fournir serait appréciée.

Merci: D.

1
Dwight Spencer

Si vous n'avez pas réglé ce problème, consultez la règle de réécriture figurant dans votre lien Pastebin.

RewriteRule ^(.*)$ http://www.diviniti.cc/joomla-1.5.20/$1 [R=301,QSA,L]

il y a quelques choses qui vainc vos désirs ici:

  • la directive R=301 obligera le navigateur à s'en "aller" et chargera l'URL réécrite, en modifiant l'URL dans le navigateur.
  • votre désir de également rediriger les sous-domaines non-www vers un sous-domaine www est également en conflit avec votre désir de conserver le joomla une partie de l'URL masquée au navigateur.

Essayez plutôt deux règles:

Options +FollowSymlinks
RewriteEngine On

# 1. redirect (bounce) all non-www to www [as per Apache docs][1] - retaining query strings
RewriteCond %{HTTP_Host}   !^www\.example\.com [NC]
RewriteCond %{HTTP_Host}   !^$
RewriteRule ^/(.*)         http://www.example.com/$1 [L,R,QSA]

# 2. then, use joomla but hide the joomla dir - note the lack of 'R' directive
RewriteRule ^(.*)$ /joomla-1.5.20/$1 [QSA,L]

Si vous ne vous souciez pas de faire respecter "tous les sous-domaines devraient être www", ignorez la règle n ° 1, laissez la règle n ° 2.

Vous n'avez pas besoin de la deuxième réécriture que vous avez eue dans votre Pastebin, pour la 'racine':

# Also redirect the root folder.
RewriteCond %{HTTP_Host} ^(*.)?diviniti\.cc$
RewriteRule ^(/)?$ joomla-1.5.20/index.php [L]

parce que la ^(.*)$ dans la réécriture fournie correspond également au cas où l'URL est http://www.example.com/

Maintenant, il est possible que Joomla lui-même ne soit pas heureux avec cette chicane, il peut ne pas aimer profondément être à cette pseudo-racine alors que la racine du document dit autre chose et il est possible que ça se moque.

1: http://httpd.Apache.org/docs/2.0/misc/rewriteguide.html#url "selon la documentation Apache"

2
Gavin C