2012-02-06 1 views
0

Je veux mettre en place une jolie URL sur un répertoire virtuel. Mais je veux aussi un filet de sécurité pour le répertoire virtuel au cas où quelqu'un le rencontrerait directement. Appelons le répertoire virtuel fooMod_rewrite, 301s et slashes

RewriteRule ^foo/(.*)$ ./foo/page.php?term=$1 [QSA] 

Cela semble fonctionner correctement. Toutes les pages sont redirigées et affichées correctement et la jolie URL reste dans la barre d'adresse (plutôt que de rediriger vers l'adresse physique comme avec un 301)

Mais si je vais sur www.domain.com/foo Je reçois 404 :(

Si je vais à www.domain.com/foo/ (notez la barre oblique)

le script se poursuit et un message d'erreur est affiché grâce à une validation supplémentaire dans mon PHP. Comment puis-je ranger le répertoire virtuel (avec/sans une barre oblique)? Personne ne devrait jamais frapper cela, mais si ils le font, je veux être prêt et les rediriger vers la page d'accueil

Après avoir lu another users question j'ai essayé:

Redirect 301 /foo /?q=empty 

Mais c'est en conflit avec ma règle initiale. Je suis de se retrouver avec des liens comme: www.domain.com/?q=empty/Blah (au lieu de/foo/Blah)

+0

donnez des détails: sur la façon dont votre jolie URL ressemble à 'topic'. – ThinkingMonkey

+0

sujet était censé être foo. édité. :) – Adam

+0

vérifier la réponse mise à jour. – ThinkingMonkey

Répondre

0

Essayez ceci:

RewriteCond %{REQUEST_URI} ^foo/$ 
RewriteRule^/foo/page.php?q=empty [L,QSA] 

RewriteRule ^foo/(.*)$ foo/page.php?term=$1 [L,QSA] 
+0

Rendre la barre oblique optionnelle pourrait causer des problèmes avec les dossiers commençant par 'foo'. par exemple. '/ foobar/test' redirige vers' /foo/page.php? term = bar/test'. Pas de problème dans ce cas à cause de la règle qui le précède, ce qui le rend un peu inutile. – Gerben

+0

@gerben est d'accord. – ThinkingMonkey

0

il suffit d'ajouter une règle supplémentaire pour ce cas

RewriteRule ^foo/?$ ./foo/page.php [QSA, L]