Клиент попросил меня автоматически перенаправить любые URL-адреса с помощью знака фунта в версию без знака фунта, но я не думаю, что обнаруживаю # в любом из моих URL-адресов с помощью этой формулы. Я отправил по электронной почте пример URL-адреса, используя формулу curPageURL (), и он не содержал завершающий # знак в URL, который я тестировал.
function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } if(stripos($currenturl,'#')) { Header( "HTTP/1.1 301 Moved Permanently" ); $location = 'Location: ' . str_replace('#','',$currenturl) . '/'; Header($location); }
* Исправление – я сказал в конце в заголовке, и я имею в виду конец, мой код здесь apparantly обнаруживает для знака фунта в любом месте URL-адреса. *
Часть после #
является «хешем» или «фрагментом». Он полностью клиентский – он никогда не отправляется на сервер (и если это так, это приводит к ошибке). Таким образом, ваш PHP-скрипт никогда не увидит его, и поэтому не может его исправить. Это правильное поведение и дизайн.
Тем не менее, вы можете проверить #фрагмент, используя решение на стороне клиента (например, в JS с document.location.hash
) и перенаправить оттуда.
Вы можете использовать javascript для переопределения события click во всех тегах вашей страницы. Если вы используете jQuery, вы можете сделать что-то вроде следующего.
$(function() { $('a').click(function(ev) { alert(ev.currentTarget.hash); return false; }); }); <table> <tr><td><a href='http://google.com/#test1'>Test 1</a></td></tr> <tr><td><a href='/game/?p=test#test2'>Test 2</a></td></tr> <tr><td><a href='#test3'>Test 3</a></td></tr> </table>
Когда клика нажата, происходит событие клика, и в этот момент вы можете решить, что делать на основе хэша из href. Вы можете перестроить href с помощью хэша в качестве параметра GET и перенаправить страницу, иначе вы можете превратить ее в вызов ajax.
В событии click вы можете решить, что делать с хэш-тегом. Если вам это действительно нужно на стороне сервера, вы всегда можете добавить его в строку запроса или выполнить вызов ajax.