Ответ 1
Хэш-часть URL-адреса недоступна для перезаписи. Когда веб-браузер отправляет URL-запрос на веб-сервер, он отправляет все до знака хэша. Хэш доступен только на клиенте (например, код JavaScript может видеть его).
Вопрос довольно прост, но я не мог найти ответ в течение нескольких часов.
Что мне нужно сделать:
RewriteRule ([^#])#(.*) $1\%23$2
Что в основном означает, что я хочу, чтобы URL-адрес исчез из-за лишнего символа хэша, который приходит ко мне из внешнего кодекса.
обратная косая черта (\
) не работает, чтобы избежать этого знака... и, пожалуйста, не предлагайте использовать %23
вместо #
, потому что это тоже не работает.
(%2
3 не соответствует a #
, потому что это просто не == %23
)
Хэш-часть URL-адреса недоступна для перезаписи. Когда веб-браузер отправляет URL-запрос на веб-сервер, он отправляет все до знака хэша. Хэш доступен только на клиенте (например, код JavaScript может видеть его).
Я только что получил эту работу для сайта, следующего за несколькими сообщениями на этом форуме, я использую правило перезаписи с NE не упускать и R = 301 параметры перенаправления:
RewriteRule ^galleries/([a-zA-Z0-9_-]+)$ /gallery.html#/$1 [R=301,NE,L]
Это перенаправляет все галереи/переменные на /gallery.html#/variable
Изменить: важной частью правила является NE, который инструктирует сервер для анализа вывода без экранирования символов. Без этого он попытается избежать символа # в правиле перезаписи, о котором спрашивает OP.
Поиск Расширенное перенаправление в http://httpd.apache.org/docs/2.0/misc/rewriteguide.html. Есть хорошее решение для вашего вопроса.
.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;
?>