slash

2009-06-12 4 views
2

Comment puis-je ajouter un slash à:slash

RewriteEngine on 
RewriteRule !\.(js|ico|gif|jpg|png|css|html)$ index.php 

J'ai essayé avec:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+[^/])$ $1/ [R] 

Mais il ne fonctionne pas

+0

Attend OK pour me – Greg

+0

Pouvez-vous nous donner plus d'informations (+ devrait vraiment * bien..)? Peut-être sur la façon dont vous avez testé cette règle. – Gumbo

+0

Le contenu que j'ai posté est ce que mon .htacess contient, celui de RewriteRule! \ (Js | ico | gif | jpg | png | css | html) $ index.php copié de Zend. –

Répondre

3

Voir la ligne détail/description des CondPatterns -d et -f pour RewriteCond. Voir comment il est dit "teste s'il existe ou non, et est un fichier régulier"? C'est cher et ça ne va pas bien du tout. Est-ce que vous vous souciez vraiment si c'est "un fichier régulier"? Non, vous vous souciez seulement si ressemble comme un fichier. (correspond au modèle filename.extension) Donc, je vais améliorer votre réécriture pendant que je suis là-bas.

Voir le détail/la description du drapeau 'last | L' pour RewriteRule. Voir comment il est dit "n'appliquez plus de règles de réécriture"? Je parie que c'est ce que tu veux, n'est-ce pas? Vous voulez soit index.php à utiliser lorsqu'une requête ne correspond pas à l'extension d'un actif statique, OU vous voulez mettre une barre oblique à la fin d'une requête qui ne correspond pas au nom du fichier. . Pas les deux.

Voici comment faire:

# turn on matching 
RewriteEngine on 

# 1st rule block. If any of the conditions don't apply skip over this block to the next. 
# condition: uri ends with filename.extension 
RewriteCond %{REQUEST_URI} [^/.]+\.[^/.]+$ 
# condition: uri doesn't end with a desired extension 
RewriteCond %{REQUEST_URI} !\.(js|ico|gif|jpg|png|css|html)$ [NC] 
# rewrite the request to be for index.php and don't apply any more rules 
RewriteRule - index.php [L] 

# 2nd rule block. If any of the conditions don't apply skip over this block to the next. 
# condition: uri doesn't end with a slash 
RewriteCond %{REQUEST_URI} !/$ 
# condition: uri doesn't end with filename.extension 
RewriteCond %{REQUEST_URI} !/[^/]+\.[^/.]+$ 
# rewrite the request to be appended with a slash 
RewriteRule (.*) $1/ [R=301] 

C'est une très bonne réponse étant donné que vous ne nous avez pas dire que vous voulez que vous essayez de faire. Si vous voulez une meilleure réponse, vous devrez nous donner plus d'informations que "J'ai copié et collé deux snipets de code ensemble, mais ça ne marche pas."


Mise à jour: Je jeté à la hâte ensemble modifié à cette réponse basée sur la réponse de cornegigouille. Voici une transcription de shell bash de la preuve que j'ai faite pour le tester. Faites-moi savoir si vous voyez un bug.

#bruno:~$ (
for str in asdf asdf.css asdf.min.css; do 
    echo -e "\n## $str ##" 
    echo /brunobronosky1/$str | grep -E '/[^/.]+\.[^/.]+$' || echo '[no match]' 
    echo /brunobronosky2/$str | grep -E '/[^/]+\.[^/.]+$' || echo '[no match]' 
    echo /cornegigouille/$str | grep -E '/[^/.]+(\.[^/.]+)+$' || echo '[no match]' 
done 
) 

## asdf ## 
[no match] 
[no match] 
[no match] 

## asdf.css ## 
/brunobronosky1/asdf.css 
/brunobronosky2/asdf.css 
/cornegigouille/asdf.css 

## asdf.min.css ## 
[no match] 
/brunobronosky2/asdf.min.css 
/cornegigouille/asdf.min.css 
+0

NOTE: Pour maintenir l'intégrité de la réponse de @ cornegigouille, je veux enregistrer que j'avais initialement un point dans le premier jeu de caractères du dernier RewriteCond, comme ceci: 'RewriteCond% {REQUEST_URI}!/[^ /.] + \ . [^ /.] + $ 'C'était une erreur qui a rendu mon code fragile. Je l'ai depuis corrigé grâce à eux qui se soucient assez pour le signaler. –

1

La réponse de Bruno est excellente mais incomplète.
Il ne traite pas le cas où un nom de fichier contient plusieurs points. Ceci est assez courant lorsque vous commencez à utiliser la minification (par exemple www.mysite.com/css/styles.min.css).

La 2ème état du 2e bloc de règles doit donc être:

# condition: uri doesn't end with filename.extension 
RewriteCond %{REQUEST_URI} !/[^/.]+(\.[^/.]+)+$ 
+1

7 ans plus tard ... sympa! –

+0

Oui, 7 ans plus tard n'aide pas le PO mais il aide la communauté. –

+1

Bonne prise, @cornegigouille. Cependant, je pense que mon erreur peut être corrigée en diminuant la complexité de l'expression rationnelle plutôt qu'en l'augmentant. Cela semble-t-il fonctionner pour vous? 'pour str in/asdfcss /asdf.css /asdf.min.css; fais écho "## $ str ##"; echo $ str | grep -E '/[ ^/]+\.[ ^/.] + $ '; Je pense que c'est le cas, mais je peux être mentalement hors de contexte après si longtemps. –

Questions connexes