Как взять ПОЛНЫЙ текущий (включая якорь) URL

Главные вкладки

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 24 августа 2010 в 23:06

Есть скажем такой УРЛ

http://site.com/product/productname#comment-17

Так вот, мне необходимо вычленить с него comment-17. Однако же загвоздка: если я применяю стандартные друпаловские способы, выводится в лучшем случае полный УРЛ но без якоря

Скажем, пробовал такое:

<?php

$uri 

$_SERVER['HTTP_HOST'] . '/' request_uri();
print 
$uri;

?>

или даже такое

<?php

$url 

= (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
print 
$url;

?>

GET q тоже не работает

Как быть?

Комментарии

Аватар пользователя Xermit Xermit 25 августа 2010 в 13:14

Ну если якоря даже в GET['q'] нет, то скорей всего у вас включену чистые ссылки и mod_rewrite не передаете все что после # в drupal.

Аватар пользователя Xermit Xermit 25 августа 2010 в 13:30

Если бы передавался то в arg(номер_последнего_аргумента), якорь бы был.

Обычно используются следующие правила для mod_rewrite drupal или что то подобное

<Directory /var/www/example.com>
   RewriteEngine on
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>

Как видите в q передается вся строка от начала и до конца.

Аватар пользователя xxandeadxx xxandeadxx 25 августа 2010 в 13:33

"Xermit" wrote:
Если бы передавался то в arg(номер_последнего_аргумента), якорь бы был.

"xxandeadxx" wrote:
якоря не передаются на сервер

Аватар пользователя Xermit Xermit 25 августа 2010 в 13:36

Ну и до кучи нашел вот такое любопытное описание для mod_rewrite

Description:

By default, redirecting to an HTML anchor doesn't work, because mod_rewrite escapes the # character, turning it into %23. This, in turn, breaks the redirection.
Solution:

Use the [NE] flag on the RewriteRule. NE stands for No Escape.

----------
Но конвертирование логически не должно помешать так как php при получении должен был раскодировать %23 в # снова.

Аватар пользователя Shift-Web Shift-Web 25 августа 2010 в 14:53

"Xermit" wrote:
By default, redirecting to an HTML anchor doesn't work, because mod_rewrite escapes the # character, turning it into %23. This, in turn, breaks the redirection.

Ну по идее правильно. #bla-bla -- это маркер на части документа, а не отдельный самостоятельный url

Аватар пользователя Xermit Xermit 25 августа 2010 в 16:06

Ок, соглашусь что не посылаются не сервер, честно говоря откровение для меня за столько лет это узнать Biggrin
А чтобы уж не голословно, действиетельно по rfc2396 якорь обрабатывается после получения данных, это же косвенно в еще одной rfc прописано, что якорь используется только после получения данных по первой ссылке (часть URI до знака #), а уже потом используется вторая вложенная ссылка, которая и называется якорь. И что интерпретируется исключительно броузером после получения ресурса.

4.1. Fragment Identifier When a URI reference is used to perform a retrieval action on the identified resource, the optional fragment identifier, separated from the URI by a crosshatch ("#") character, consists of additional reference information to be interpreted by the user agent after the retrieval action has been successfully completed. As such, it is not part of a URI, but is often used in conjunction with a URI.