Puncte:2

Create "shortcut" for GET parameters redirection in Apache2

drapel cn

I try to create a config in apache server that will transfer the url

foo.bar/baz/hq

to

foo.bar/baz#a=1;b=2;c=3

where baz can be anything. I tried this (see https://stackoverflow.com/a/8606198/3475778)

RewriteRule ^([A-Za-z0-9-]+)/hq$ $1#foo=bar [NC,NE,R=302]

but somehow the redirect doesnt seem to work and I do not know why.

My conf file looks like this - sorry it is a bit messy, I am not a sysadmin.

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName xxx
    Redirect    302 /   http://xxx/


SSLCertificateFile /etc/letsencrypt/live/xxx/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxx/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName xxx
    ErrorLog /var/log/apache2/xxx.net-error.log

    RewriteEngine on
    RewriteRule ^([A-Za-z0-9-]+)/hq$ $1#foo=bar [NC,NE,R=302]

    ProxyPass "/" "http://localhost:8000/"
    ProxyPassReverse "/" "http://localhost:8000/"
    ProxyPass "/http-bind" "http://localhost:8000/http-bind/"
    ProxyPassReverse "/http-bind" "http://localhost:8000/http-bind"
    RewriteEngine on
# Some rewrite rules in this file were disabled on your HTTPS site,
# because they have the potential to create redirection loops.

        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteCond %{HTTP:Connection} upgrade [NC]
        RewriteRule ^/?(.*) "ws://localhost:8000/$1" [P,L]


SSLCertificateFile /etc/letsencrypt/live/xxx/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/xxx/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
user10489 avatar
drapel nc
De ce există un comentariu acolo despre dezactivarea regulilor de rescriere din cauza unei bucle de redirecționare?
capitalg avatar
drapel cn
@user10489 acel fișier/secțiune a fost generat automat de la certbot
Puncte:0
drapel nc

Partea URL după # nu este transmis către serverul web într-un GET, deci nu are de unde să știe dacă redirecționarea a fost deja făcută sau nu. Aceasta s-ar transforma într-o redirecționare recursivă fără nicio modalitate de a întrerupe bucla.

Dacă doriți să faceți așa ceva, trebuie să faceți partea client, eventual în javascript, unde poate fi accesată partea de ancorare a URL-ului.

Ați putea trimite pe cineva la un link cu un # dintr-o aplicație pe partea serverului, dar acest lucru ar fi util doar pentru linkurile care duc la această pagină (inclusiv linkurile de pe aceeași pagină). Dacă doriți să faceți acest lucru de pe aceeași pagină, veți avea nevoie de ceva din partea clientului pentru a face acest lucru.

capitalg avatar
drapel cn
Vă mulțumesc pentru răspuns, dar răspunsul SE legat (https://stackoverflow.com/a/8606198/3475778) a menționat că redirecționările către `#` sunt posibile prin redirecționare, care este exact ceea ce vreau să fac aici. Redirecționarea de mai sus nu ar trebui să fie recursivă, deoarece numai cu apendicele`*/hq` veți obține o redirecționare - această adresă URL este accesată numai prin adăugarea manuală la o adresă URL existentă. Dar cumva, chiar dacă îl schimb cu ceva fără `#`, tot nu pot face ca redirecționarea să funcționeze și nu îmi pot da seama de ce nu funcționează.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.