Необходимо избежать символа # (хеш/фунт) в .htaccess rewrite rule

Вопрос довольно прост, но я не мог найти ответ в течение нескольких часов.

Что мне нужно сделать:

RewriteRule ([^#])#(.*) $1\%23$2

Что в основном означает, что я хочу, чтобы URL-адрес исчез из-за лишнего символа хэша, который приходит ко мне из внешнего кодекса.

обратная косая черта (\) не работает, чтобы избежать этого знака... и, пожалуйста, не предлагайте использовать %23 вместо #, потому что это тоже не работает.

(%2 3 не соответствует a #, потому что это просто не == %23)

Ответ 1

Хэш-часть URL-адреса недоступна для перезаписи. Когда веб-браузер отправляет URL-запрос на веб-сервер, он отправляет все до знака хэша. Хэш доступен только на клиенте (например, код JavaScript может видеть его).

Ответ 2

Я только что получил эту работу для сайта, следующего за несколькими сообщениями на этом форуме, я использую правило перезаписи с NE не упускать и R = 301 параметры перенаправления:

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

Это перенаправляет все галереи/переменные на /gallery.html#/variable

Изменить: важной частью правила является NE, который инструктирует сервер для анализа вывода без экранирования символов. Без этого он попытается избежать символа # в правиле перезаписи, о котором спрашивает OP.

Ответ 4

.htaccess

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

redirect.php

<?php
    $new_url = str_replace("|", "#", $_GET['url']);
    header("Location: ".$new_url, 301);
    die;
?>