2013-04-03 2 views
1

Je ne savais pas comment formuler cette question, mais j'espère que ma description aura plus de sens quant à ce que je souhaite réaliser..htaccess réécriture lien dynamique lien caché lien

Je suis en train de construire un framework qui supporte plusieurs applications. La structure du répertoire est comme ceci:

/applications/ 

--/admin/ 
----/www/ 
------/css/ 
--------/bootstrap.css 
------/img/ 
--------/logo.png 

--/gallery/ 
----/www/ 

/system/ 
/www/ <- web root 
--/.htaccess 
--/index.php 

Je réécriture d'url pour « jolies urls » en utilisant les données de PATH_INFO en php.

site.com/index.php/path/info/data/

sera le même que

site.com/path/info/data/

Alors tout va toujours passer par cette index.php

Le principe de base du cadre est le premier segment de la L'URL portera sur le nom de l'application:

site.com/admin/ <- will load the admin application 
site.com/gallery/ <- will load the gallery application 
site.com/ <- will load what ever the default application is (specified in a framework config) 

Maintenant, voici ce que je veux que cette règle de réécriture fasse (si c'est possible), utilisez quelques exemples d'URL pour illustrer mon propos.

site.com/admin/login/

  1. Règle devient premier segment admin

  2. règle vérifie si dossier admin existe dans le répertoire des applications

  3. Si elle existe, faites en sorte que le contenu admin/www soit accessible via site.com/admin/www/

  4. affichage du répertoire Désactiver, établissent des connexions aux fichiers, donc site.com/admin/www/img/ est pas accessible, mais site.com/admin/ www/img/logo.png est accessible

  5. Seuls les fichiers ont la priorité sur la ré-écriture index.php, donc site.com/admin/www/img/ sera transmis au index.php même si la dossier existe, mais site.com/admin/www/img/logo.png référence toujours le fichier à moins qu'il n'existe pas dans quel cas il est transmis à le index.php

Donc, pour clarifier les choses, voici quelques liens et ce que je veux qu'ils fassent (en utilisant le répertoire exemple liste ci-dessus):

site.com/ < index.php 
site.com/admin/ < index.php 
site.com/admin/www/ < index.php 
site.com/admin/www/nonexistantfile.php < index.php 
site.com/gallery/ < index.php 
site.com/admin/www/css/ < index.php 

site.com/admin/www/css/bootstrap.css < bootstrap.css 
site.com/admin/www/img/logo.png < logo.png 

Bien que je peux faire ce que je veux à l'utilisation le cadre lui-même, il serait trop gourmand en ressources pour faire fonctionner le moteur d'analyse de l'uri et toutes les autres parties de l'infrastructure sur chaque chargement d'actifs, ce qui explique pourquoi je souhaite gérer cette utilisation.htaccess

Merci

Répondre

1

Essayez d'utiliser dans votre fichier .htaccess:

Options +FollowSymlinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^(.*) /index.php 

RewriteRule %{REQUEST_URI} ([a-z0-9-_]+)\.(php|png|css)$ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*) /index.php 

Vous avez dit que vous voulez les réécrire, mais si vous ne voulez pas parce que c'est pas moteur de recherche convivial, il suffit d'ajouter un drapeau [R] pour toujours /index.php sur le code mais ne pas oublier un seul espace avant le drapeau, pour les faire réorienter.

0

serait-il pas quelque chose comme ça ?:

# File: www/.htaccess 

RewriteEngine on 

RewriteBase/
# If a file exists, serve it directly 
RewriteCond %{REQUEST_FILENAME} !-f 

# otherwise forward the request to the index.php 
RewriteRule . index.php 

Assurez-vous que vous avez activé mod_rewrite et mettez la directive AllowOverride appropriée pour .htaccess prenne effet.