besoin d'évasion dièse ( # ).règle de réécriture htaccess

la question est assez simple mais je n'ai pas pu trouver de réponse depuis des heures.

Ce que je dois faire c'est:

RewriteRule ([^#])#(.*) %23

ce qui veut dire que je veux que l'url échappe au signe de hachage qui me vient d'un codepiece externe.

barre oblique inverse () ne fonctionne pas pour échapper à ce signe... et s'il vous plaît ne pas suggérer à l'aide de %23 au lieu de # parce que ça ne marche pas aussi bien.

(%23 ne correspond pas à un # parce que il n'est tout simplement pas == %23)

12
demandé sur John Kugelman 2010-08-27 18:15:13

4 réponses

la partie hachage d'une URL n'est pas disponible pour réécriture. Lorsqu'un navigateur Web envoie une demande D'URL à un serveur web, il envoie tout jusqu'au signe de hachage. Le hachage n'est disponible que sur le client (par exemple le code JavaScript peut le voir).

7
répondu John Kugelman 2010-08-27 14:22:46

je viens d'obtenir ce travail pour un site à la suite de quelques messages sur ce forum, j'utilise une règle de réécriture Avec NE not escape et R=301 redirect options:

RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/ [R=301,NE,L]

cela redirige tout galeries / variable/la galerie.html# / variable

Edit: la partie importante de la règle est NE qui demande au serveur d'analyser la sortie sans échapper aux caractères. Sans cela, il tentera d'échapper à la règle # in the rewrite qui est ce que L'OP se pose au sujet de.

24
répondu Dave 2012-12-12 01:18:33

Recherche Redirection Prolongéehttp://httpd.apache.org/docs/2.0/misc/rewriteguide.html . Il y a une bonne solution pour votre question.

2
répondu Vayn 2011-04-12 03:52:06

.htaccess

RewriteRule  old\.php redirect.php?url=http://example.com/new.php|hash [R=301,QSA,L]

redirection.php

<?php
    $new_url = str_replace("|", "#", $_GET['url']);
    header("Location: ".$new_url, 301);
    die;
?>
-2
répondu Patrik Ján 2015-08-05 20:55:25