2010-02-10 3 views
0

bien, sa ne fonctionne pas ofcourse, im encore un n00b :)htaccess ne fonctionne pas comme il devrait

c'est le code que j'ai:

Options +FollowSymLinks 
RewriteEngine on 
RewriteRule (.*)\.css - [S=7] 
RewriteRule (.*)\.jpg - [S=6] 
RewriteRule ^gallery gallery.html [L] 

RewriteRule (.*)/(.*)/ index.html?page=$2 [L] 
RewriteRule (.*)/(.*) index.html?page=$2 [L] 
RewriteRule (.*)/ index.html?page=$1 [L] 
RewriteRule (.*) index.html?page=$1 [L,QSA] 

Maintenant, cela fonctionne très bien, si je tente localhost/abc mais il ne fonctionnera pas si je tente localhost/abc/

aussi, lorsque je tente localhost/abc/def (ou localhost/abc/def/pour cette question) le fichier css isnt étant inclus correctement. j'obtiens une erreur en disant que /abc/def/style.css n'existe pas. :(

Cependant, le code ne fonctionne pas si je supprime le drapeau QSA de la dernière règle, c'est le code que j'ai trouvé après beaucoup de googling et de lecture SO.Si quelqu'un peut aider je serai extrêmement reconnaissants.

merci!

Répondre

0

Trier votre problème de slash avec (/)? plutôt que/seule

? = zéro ou un des ombles précédent

+0

hey. J'ai essayé ça aussi. mais ça ne marche pas pour une raison quelconque. – hsn

+0

avez-vous fait RewriteRule (. *)/(. *) (/)? $ Index.html? Page = $ 2 [L] –

+0

oui, c'est ce que j'ai essayé shaunhare.co.uk – hsn

0

Vous devez utiliser plus spécifique modèles .* signifie zéro ou plusieurs caractères arbitraires. Cela correspond à tout, même la chaîne vide.

Dans votre cas, abc/ correspond probablement à la règle avec le modèle (.*)/(.*) et non la règle avec (.*)/ comme vous l'avez supposé.

Essayez [^/]+ à la place (un ou plusieurs caractères à l'exception du /) et ajouter des affirmations pour le début (^) et à la fin de la chaîne ($):

RewriteRule ^([^/]+)/([^/]+)/$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/([^/]+)$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/$ index.html?page=$1 [L] 
RewriteRule ^([^/]+)$ index.html?page=$1 [L,QSA] 

Et comme déjà dit shaunhare.co.uk , vous pouvez régler le / en option en ajoutant le ? quantificateurs lui fuite:

RewriteRule ^([^/]+)/([^/]+)/?$ index.html?page=$2 [L] 
RewriteRule ^([^/]+)/?$ index.html?page=$1 [L] 
+0

hey gumbo. J'ai essayé les règles que vous avez suggérées. Malheureusement, peu importe ce que j'essaie, il est redirigé vers index.html. un conseil? merci pour votre aide jusqu'à maintenant! – hsn

+0

hey gumbo. après un peu de peaufinage, j'ai eu ces règles de travail: RewriteRule^([^ /] +)/([^ /] +) (/)? $ index.html? page = $ 2 [L, QSA] RewriteRule^([^ /] +) (/)? $ index.html? page = $ 1 [L, QSA] RewriteRule^(. *) (/)? $ index.html? page = home [L, QSA] mais le fichier css est également réécrit (ex: /abc/styles.css) des suggestions? – hsn

+0

@hsn: Vous n'avez pas besoin de mettre le simple '/' dans un groupe comme '(/)'; '/?' fonctionne aussi. Et vous pouvez utiliser une règle qui arrête le processus de réécriture si la requête peut être mappée sur un fichier existant: 'RewriteCond% {REQUEST_FILENAME} -f RewriteRule^- [L]' Mettez cette règle devant vos autres et cela devrait fonctionner. Ensuite, vous n'avez même pas besoin des deux premières règles. – Gumbo

Questions connexes