使用 Apache mod 重写以 mod 化查询字符串

Using Apache mod rewrite to modify a query string

我知道可以在我的 htaccess

中使用 mod 重写

取:

http://example.com/directory/perlscript.pl?base64encodedquery=jhfkjdshfsdf78fs8y7sd8

缩短 URL:

http://example.com/? whatever just want to make it prettier

传入:我正在使用 use CGI; 因此 $qry->param('base64encodedquery')); 然后我使用 use MIME::Base64 解码查询字符串(之前编码)。

我真的不需要对查询进行编码和解码,但我正在学习并且只想屏蔽/隐藏包含最多 15 个短参数的查询字符串。

我倾向于缩短 URLs 的 Perl module,并且我正在积极搜索。我实际上不认为我的编码查询可以与 mod 重写一起使用。所以我也会采纳 module 建议。

我不清楚你需要做什么,但如果你只想从 URL 中删除路径和查询,那么你可以使用 URI 模块

use strict;
use warnings 'all';
use feature 'say';

use URI;

my $url = URI->new('http://example.com/directory/perlscript.pl?base64encodedquery=jhfkjdshfsdf78fs8y7sd8');

say $url;

$url->path("/");
$url->query("");

say $url;

输出

http://example.com/directory/perlscript.pl?base64encodedquery=jhfkjdshfsdf78fs8y7sd8
http://example.com/?

由于您打算在某个时候使用 HTML 表单生成对您的 perl 脚本的请求,因此这适用于一个非常简单的解决方案。您可以通过向表单标记添加 method 属性来告诉浏览器发出 HTTP POST 请求而不是通常的 HTTP GET 请求。

<form method="POST" action="http://example.com/directory/perlscript.pl">
<input name="whatever"/>
</form>

浏览器将向“http://example.com/directory/perlscript.pl”发出请求,但不会有查询字符串 - 而是通过 STDIN 传入表单数据。但是你真的不需要知道,因为你使用的任何框架都应该透明地处理它并提供对传入参数的访问,就像它们是通过 URL.[=13= 传入的一样。 ]