1 votes

Configuration de .htaccess et de php

J'ai du mal à trouver la bonne configuration pour le fichier .htaccess.

J'ai créé un petit site en utilisant le modèle mvc et toutes les urls ressemblent à site.com/appname/public/index.php?param=page. J'essaie de faire en sorte que toutes les urls soient écrites comme site.com/page. J'ai cherché dans la documentation d'Apache mais je ne comprends toujours pas...

C'est ce que j'ai maintenant dans le répertoire /public :

Options -MultiViews
RewriteEngine on
RewriteBase /appname/public/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Et voici ce que j'ai dans le répertoire racine :

  RewriteEngine On
  RewriteRule ^(.*)$ appname/public [R=301,L]

Cela fonctionne bien, il redirige vers index.php (dans le répertoire /public) et réécrit toutes les urls en site.com/appname/public/page.

Maintenant, j'essaie d'en avoir plus et je voudrais cacher aussi /appname/public, mais je ne comprends pas comment. Dois-je combiner plus de RewriteRule pour correspondre à "/appname/public" ?

Des suggestions ?

Merci beaucoup !

EDIT : plus d'informations sur ce que j'essaie d'obtenir.

J'ai une arborescence de répertoires comme :

htdocs
|---appname
    |
    |---app
    |   |---other_dirs
    |   |---other_files
    |  
    |---public
        |---some_dirs/file
        |--- index.php

Pour accéder à mes pages, je dois faire pointer le navigateur vers index.php et passer une valeur GET. Ainsi, toutes les urls devraient ressembler à :

site.com/appname/public/index.php?val=page

Voici ce que j'ai en ce moment (avec les règles ci-dessus)

site.come/appname/public/page

Et c'est ce que j'essaie d'obtenir...

site.com/page

Je ne comprends pas comment réécrire/masquer aussi la partie du milieu, en gardant la dernière avec la structure "?url=$1" ("url" sera traité dans un contrôleur, analysé et ainsi de suite).

J'espère que c'est plus clair.

Merci ! :)

0voto

LGAP Points 886

Je ne comprends pas la question. Veuillez la clarifier.

Le répertoire RewriteBase se trouve-t-il dans le répertoire Documentroot ? Qu'essayez-vous d'éliminer ?

Manuel Apache Mod_Rewrite

fournit de nombreux exemples et détails sur la manière de gérer mod_rewrite

Jetez-y un coup d'œil d'abord et répondez avec plus de détails sur ce à quoi ressemble votre installation.

Ceci est tiré de cette page et explique pourquoi vous utilisez rewritebase. Les dossiers que vous souhaitez tronquer se trouvent-ils tous dans le dossier htdocs ou en dehors du répertoire public docroot ou htdocs ou www ou quel que soit le nom que vous avez donné au répertoire racine de votre document ?

RewriteBase Directive

Description:    Sets the base URL for per-directory rewrites
Syntax: RewriteBase URL-path
Default:    None
Context:    directory, .htaccess
Override:   FileInfo
Status: Extension
Module: mod\_rewrite
The RewriteBase directive specifies the URL prefix to be used for per-directory (htaccess) RewriteRule directives that substitute a relative path.

This directive is required when you use a relative path in a substitution in per-directory (htaccess) context unless either of the following conditions are true:

The original request, and the substitution, are underneath the DocumentRoot (as opposed to reachable by other means, such as Alias).
The filesystem path to the directory containing the RewriteRule, suffixed by the relative substitution is also valid as a URL path on the server (this is rare).
In the example below, RewriteBase is necessary to avoid rewriting to http://example.com/opt/myapp-1.2.3/welcome.html since the resource was not relative to the document root. This misconfiguration would normally cause the server to look for an "opt" directory under the document root.

DocumentRoot /var/www/example.com
Alias /myapp /opt/myapp-1.2.3

RewriteEngine On
RewriteBase /myapp/
RewriteRule ^index\\.html$  welcome.html

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X