2009-09-04 2 views
2

J'utilise Apache 2.2 avec mod_rewrite.mod_rewrite rediriger vers URL avec protocole propriétaire

Existe-t-il un moyen de forcer mod_rewrite à réécrire l'intégralité de l'URL, y compris le protocole? Je sais que cela va réécrire automatiquement l'URL complète si la redirection contient http:// au début mais je suis en train de rediriger vers une URL qui utilise un protocole propriétaire: fcp://

Quand je l'ajoute en tant que redirect il redirige juste l'URL de mon serveur avec la réécriture ajouté comme ceci:

http://www.example.com/fcp://@mailstaff.... 

puis-je configurer le module pour traiter fcp:// comme une URL complète si je ne cours pas pour cela?

MISE À JOUR: Voici le code que je utilise:

RewriteCond ${externals:$2|Unknown} !Unknown 
RewriteRule ^(internal|external)/(.*)/? ${externals:$2} [R=301,NE,L,NS] 

A l'intérieur du externals RewriteMap, j'ai une ligne comme ceci:

firstclass-email  fcp://@mailstaff.example.com/ 

Quand je vais à déclencher la RewriteRule par aller à:

http://example.com/internal/firstclass-email 

Il sera incorrec TLY me rediriger ici:

http://example.com/fcp://@mailstaff.example.com/ 

Si je change la partie du protocole de fcp:// à http://, Apache réalisera c'est une URL absolue et correctement. Je veux qu'Apache reconnaisse fcp:// devrait aussi être absolu.

Répondre

2

Apache ne peut gérer les systèmes les URL les plus courantes comme http, https, ftp, mailto, etc. schémas d'URL personnalisées ne sont pas reconnus en tant que tels, mais traité comme un chemin d'URL.

Voir la fonction is_absolute_uri dans le source code of mod_rewrite.c pour plus de détails sur les schémas pris en charge.

+1

C'est ce que je craignais :(Y a-t-il un moyen de changer cela dans le monde des utilisateurs? – matpie

+2

Essayez d'utiliser un script qui gère la redirection au lieu d'Apache – Gumbo

+0

"Apache ne peut gérer ..." - à proprement parler, il est * mod_rewrite * Les autres modules (comme mod_alias: 'Redirect' /' RedirectMatch') semblent pouvoir les "gérer" correctement. – DocRoot

0

Avez-vous essayé?

RewriteRule ^/yourUrl$ fcp://otherUrl [RL] 
+0

C'est plutôt une question d'une réponse. Mais de toute façon, avez-vous essayé cela tout seul? – Gumbo

+0

N'a pas essayé, mais c'est ma suggestion de quoi essayer. Voyez-vous quelque chose qui ne va pas? –

+0

Je l'ai posé en tant que question/réponse parce qu'il n'a pas listé ce que RewriteRule utilisait actuellement. –

0

Assez vieille question - mais je peux répondre. J'ai eu le même problème. Cela peut être résolu avec deux redirections.

Redirect /restore1 fcp://example.com/restore 

RewriteEngine On 
RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego).+mobile..... 
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|..... 
RewriteRule ^restore/(.*)$ http://example.com/restore1/$1