【问题标题】:Using Apache mod rewrite to modify a query string使用 Apache mod rewrite 修改查询字符串
【发布时间】:2019-02-03 02:44:00
【问题描述】:

我知道可以在我的 htaccess 中使用 mod rewrite

拍摄:

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

制作一个较短的网址:

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

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

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

我倾向于使用缩短 URL 的 Perl 模块,并且我正在积极搜索。我实际上不认为我的编码查询可以与 mod rewrite 一起使用。所以我也会接受模块建议。

【问题讨论】:

  • 生成 URL 的原因是什么?
  • 目前,我的脚本从一个硬编码或只是粘贴在浏览器中的查询字符串中查询我的数据库,因为我还没有解决这个长 URL 问题。一旦我弄清楚了这一点,我就会制作一个我已经做过很多次但没有这么多变量的搜索表单。因此,如果需要,我也可以在查询源处实现。
  • @Stephanie:您的问题旁边有一个“-1”,因为有人(不是我)阅读它时认为它值得投反对票。
  • 一个问题在被编辑到不能代表我想问的问题后,不应被否决。上面的问题不仅仅是我想要解决的问题。哦,好吧,我不会再问任何问题了。

标签: apache perl mod-rewrite url-rewriting mod


【解决方案1】:

由于您打算在某些时候使用 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 传入一样。

【讨论】:

  • 太棒了!!谢谢你,克里斯。我不知道那是如何逃脱我的思考过程的,我猜是缺少还是太近而看不到?这适用于表单,如果出于某种原因我必须直接从脚本发送公开可见的查询,我总是可以使用 POST 编写解决方法。太感谢了。然而,mod重写仍然让我感到困惑,很高兴我现在不需要使用它。祝你有美好的一天。
  • LWP::UserAgent 又是我的朋友了!解决了。​​
【解决方案2】:

我不清楚您需要做什么,但如果您只想从 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/?

【讨论】:

  • 那不会通过查询字符串进行处理正确吗?我倾向于 Algorithm::URL::Shorten 模块,但是在弄清楚如何实现时遇到了麻烦。生成很好,但无法弄清楚如何编写所需的文件,甚至可能使用 mysql。
  • @Stephanie:不,它明确地删除了查询,并准确地产生了您要求的输出。你能更好地解释你想用它做什么吗?
  • 我想使用我的长网址(由于来自搜索表单的动态查询字符串)并缩短它。我想在我的 htaccess 中使用 mod rewrite 来做到这一点。查询字符串中的 15 个参数中可能有 14 个也是空白的。
  • P.S. Algorithm::URL::Shorten 模块即使对于静态链接非常有用的编码查询也能很好地工作,但是我的误解是该模块不能解决缩短登录页面地址栏中的 url。
  • @Stephanie:我仍然不清楚你想要达到的目标。我对您的问题所做的编辑没有删除任何重要信息。啊,从您接受的答案看来,您试图混淆 URL 查询;这一点我都不清楚。请注意,即使使用POST,参数对于想要努力提取它们的人仍然可见:它们只是在地址行中不可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多