在 Apache2 中创建 GET 参数重定向的“快捷方式”

在 Apache2 中创建 GET 参数重定向的“快捷方式”

我尝试在 apache 服务器中创建一个配置来传输 url

foo.bar/baz/hq

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

其中 baz 可以是任意值。我尝试过这个(参见https://stackoverflow.com/a/8606198/3475778

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

但不知何故,重定向似乎不起作用,我不知道为什么。

我的配置文件看起来像这样 - 抱歉,有点混乱,我不是系统管理员。

<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>

答案1

url 后面的部分#不会通过 GET 传输到 Web 服务器,因此无法知道重定向是否已完成。这将变成递归重定向,无法中断循环。

如果您想做这样的事情,则需要在客户端完成,可能使用 javascript,其中可以访问 URL 的锚点部分。

您可以从服务器端应用程序向某人发送带有 # 的链接,但这只对指向此页面的链接有用(包括同一页面上的链接)。如果您想从同一页面执行此操作,您仍然需要客户端来实现它。

相关内容