Forum général.général Htaccess - Ne doit pas contenir /

Posté par  .
Étiquettes : aucune
0
22
mai
2007
Bonjour,

J'ai un soucis avec un htaccess, je dispose d'une arboresence comme celle-ci :

index.php
admin/
admin/index.php

J'essaye de realiser un htaccess qui conduirais toutes les requettes vers index.php sauf si ya un / (pour aller dans admin/)

J'ai essayer de lui dire: ne doit pas contenir / , mais il veut pas marche :

RewriteEngine On
RewriteRule [^/]* index.php [NC,L]

Mais ça ne marche pas, comment je pourais faire pour lui dire que si l'url contient un /, tu ne passe pas par index.php ?

Merci.
  • # URL qui contient /

    Posté par  (site web personnel) . Évalué à 2.

    Tu peux me donner un exemple d'url qui ne contient pas de / ?
    • [^] # Re: URL qui contient /

      Posté par  . Évalué à 1.

      Je crois avoir mis la confusion avec mon exemple.

      Je cherche à faire un !strstr($chaine, '/') version htaccess

      Disons que j'ai une arboresence :

      .htaccess <---
      cms.php
      admin/
      admin/pleins de trucs dans admin/

      le lien direct vers cms.php est : http://monsite.com/cms.php

      J'utilise la reecriture url pour gerer par exemple : http://monsite.com/une-page-54.html , mais dont les urls peuvent changer de type.

      Mais je me rend compte qu'avec [^/] je n'arrive pas à acceder au dossier admin (http://monsite.com/admin/ me renvoie toujours à cms.php).

      Donc il me faudrais pouvoir dire à Apache: tu redirige toutes les requettes vers cms, sauf si elle contiennent un /
      • [^] # Re: URL qui contient /

        Posté par  . Évalué à 2.

        le monsieur au-dessus te dit simplement que dans l'URL http://monsite.com/cms.php tu as déjà 3 fois / donc tu ne peux pas utiliser ce critère pour distinguer ton URL d'administration.

        B.
      • [^] # Re: URL qui contient /

        Posté par  (site web personnel) . Évalué à 2.

        Ceci devrais faire l'affaire :
        <Directory /var/www/html>
        # Allow from all
        Order deny,allow
        Allow from all
        # Allow index and symlink
        Options Indexes SymLinksifOwnerMatch
        # Deny .htaccess
        AllowOverride None
        # Rewrite url
        <IfModule mod_rewrite.c>
        RewriteEngine On
        # redirige toutes les requêtes non /robots.txt, non /admin.*
        # et pas existant sur index.php
        RewriteCond %{REQUEST_URI} !^/admin
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^.* index.php [L]

        # redirige toutes les requêtes commençant pas /admin vers ce rep
        RewriteCond %{REQUEST_URI} ^/admin
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^.* admin/index.php [L]
        </IfModule>
        </Directory>

        Par contre fait gaffe, ton site pourra plus utiliser certaines variable de $_SERVER, tu va devoir reparser seul le $_SERVER['REQUEST_URI'], mais c'est facile.
  • # ???

    Posté par  . Évalué à 2.

    Ton site ne contient que 2 fichiers index.php et un répertoire admin ?

    Si c'est ça, tu peux juste utiliser la directive ErrorDocument et les code HTTP kivonbien :
    ErrorDocument 400 /index.php
    ErrorDocument 401 /index.php
    ErrorDocument 403 /index.php
    ErrorDocument 404 /index.php

    Sinon, tu peux rajouter un "deny from all" pour tous les autres fichiers + ErrorDocument :
    <Files .htaccess>
    Order allow,deny
    Deny from all
    </Files>
    <Files *.inc>
    Order allow,deny
    Deny from all
    </Files>
    ErrorDocument 400 /index.php
    ErrorDocument 401 /index.php
    ErrorDocument 403 /index.php
    ErrorDocument 404 /index.php

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.