2009-10-14 8 views
0

Je veux juste attraper toutes les demandes et les transmettre en interne à ma page catchall avec toutes les données POST intactesComment faire une simple redirection interne .htaccess Catch All script lors du transfert des données POST?

de capture toutes les pages: http://www.mydomain.com/addons/redirect/catch-all.php

Je l'ai essayé tant de combinaisons, mais mon serveur ne veulent rediriger interne si je précise plus de catch-all.php

# Internally redirect all pages to "Catch" page 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule (.*) /addons/redirect/catch-all.php [L] 

aussi, ai-je besoin [L] ou est inutile pour les redirections internes?

Alors, quel code php devrais-je utiliser pour saisir les données POST, l'utiliser, et enfin PHP rediriger la page à la page demandée initialement

Serait-il fait aussi normal en utilisant $ _POST [ 'variable_name ']; ou quelque chose de différent? Alors, comment pourrais-je appeler la page demandée à l'origine, donc je peux dire à PHP à l'emplacement de l'en-tête de les diriger vers cette page?

Merci!

MISE À JOUR:

Ha malade, tant pis. La condition fonctionne. Voici mon code:

# Internally redirect all pages to "Catch" page 
Options +FollowSymLinks 
RewriteEngine on 

RewriteCond %{REQUEST_URI} !^/robots.txt$ 
RewriteCond %{REQUEST_URI} !\.(gif¦jpe?g¦png¦css¦js¦pdf¦doc¦xml)$ 

RewriteCond %{REQUEST_URI} !^/addons/redirect/catch-all\.php$ 
RewriteRule (.*)$ /addons/redirect/catch-all.php?q=$1 [L] 

Merci les gars pour l'inspiration! Il est maintenant temps de faire fonctionner PHP ...

Répondre

0

Je pense que ce que vous avez redirigera également les demandes d'images et de fichiers .js. En outre, toute redirection PHP header() ne ferait que retourner directement dans la RewriteRule, n'est-ce pas? Si vous voulez que du code soit traité sur chaque page avant d'exécuter la page demandée, et que les pages demandées existent réellement, pourquoi ne pas avoir un fichier d'en-tête inclus dans toutes vos pages? Ensuite, le fichier d'en-tête pourrait inclure le code fourre-tout que vous voulez exécuter (ou un include() pour cela). Aucune RewriteRule requise.

0

L est pour la fin, ou arrêtez ici. C'est bien.

# Internally redirect all pages to "Catch" page 
Options +FollowSymLinks 
RewriteEngine on 
RewriteRule (.*) /addons/redirect/catch-all.php?q=$1 [L] 

Ce stockera l'emplacement d'origine comme $ _GET [ 'q']

Traitez vos trucs $ _POST normalement, en faisant attention de ne rien de sortie, puis:

header('Location: ' . $_GET['q'],true,302); 

302 moyens redirection temporaire.

Non testé, mais je fais quelque chose de similaire à rediriger les connexions.

EDIT: Hmm .. Cela provoquera une boucle telle quelle. Vous aurez besoin d'un autre RewriteRule pour savoir quand vous avez déjà redirigé un utilisateur. Peut-être ajouter? Q = redirigé sur l'URL d'origine et l'utiliser comme un arrêt pour une autre RewriteRule? Je suppose que vous pourriez aussi utiliser un lien symbolique vers votre racine web pour faire la différence.

/var/www/html/bla lié retour à/var/www/html

puis après avoir attrapé le message que vous envoyez à tous les utilisateurs/blah à la place.Même contenu, deux chemins, un accessible directement, un seul à travers votre tout attraper.

+0

Je suis vraiment nouveau à ce sujet - si vous pouvez donner un exemple de la façon de faire la première chose que j'apprécierais. Je pensais que je pouvais faire une condition comme ça - mais il ne semble pas fonctionner: (. *) RewriteCond% {REQUEST_URI} ^/addons/rediriger/catch-all.php $ RewriteRule/addons/redirect/catch-all.php? q = $ 1 [L] Fondamentalement, rediriger tous les réalisateurs à "catchall" mais si son "catchall" ne redirige pas alors - comment cela ne fonctionne pas> –

Questions connexes