Как я могу обнаружить, удалить и перенаправить URL с # в конце в PHP? - PullRequest
2 голосов
/ 01 февраля 2011

Клиент попросил меня автоматически перенаправить любые 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);
}

* Исправление - я сказал в конце в заголовке, и я имею в виду конец, мой код здесь явно обнаруживает знак фунта в любом месте в URL. *

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Часть после # является «хэшем» или «фрагментом».Он полностью на стороне клиента - он никогда не отправляется на сервер (и если это так, это приводит к ошибке).Таким образом, ваш PHP-скрипт никогда его не увидит и поэтому не сможет это исправить.Это правильное поведение, и по замыслу.

Тем не менее, вы можете проверить #fragment, используя клиентское решение (например, в JS с document.location.hash), и перенаправить оттуда.

2 голосов
/ 01 февраля 2011

Вы можете использовать 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>

Когда ссылка нажата, событие click запускается, и в этот момент вы можете решить, что делать, основываясь на хэше из href. Вы можете перестроить href с помощью хэша в качестве параметра GET и перенаправить страницу, или вы можете превратить ее в вызов ajax.

В событии click вы можете решить, что делать с хеш-тегом. Если вам действительно это нужно на стороне сервера, вы всегда можете добавить его в строку запроса или выполнить ajax-вызов.

...