prova semplice, accedendo http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server
python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -
Il server riceve la richiesta senza l'#appendage - nulla dopo il tag hash è semplicemente una ricerca di ancoraggio sul client.
È possibile trovare il nome di ancoraggio utilizzato all'interno dell'URL tramite JavaScript utilizzando, ad esempio:
<script>alert(window.location.hash);</script>
La funzione parse_url() in PHP può funzionare se si dispone già la stringa URL necessari tra cui il frammento (http://codepad.org/BDqjtXix):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
Ma non credo che PHP riceve le informazioni frammento, perché è solo client.
Grazie! Quindi, per essere chiari, invece di questo: 'www.example.com/? Val = 1 # part2' Dovresti reindirizzare ad esso sul server, in questo modo: ' www.example.com/? redirectUrl =% 2F% 3Fval% 3D1% 23part2' e ovviamente dovresti aggiungere il supporto per reindirizzare a quell'altro url nella tua altra pagina. Non eccezionale, e naturalmente non funziona per tutti i casi d'uso, ma funziona con i segnalibri. Nota che se lo fai, non dovresti consentire reindirizzamenti a url assoluti, solo url relativi, per assicurarti di non aprirti a [reindirizzamenti non sicuri] (https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet) –