Perl - Linux - 如何让我的“index.pl?see=this&foo=that&bar=that”网址相当漂亮? (index.pl/(see值)?

时间:2011-01-04 16:31:23

标签: perl .htaccess mod-rewrite

我一直在阅读并努力无济于事。

我有一个这样的网址:http://my-domain.com/index.pl?see=this&foo=that&bar=that

我想要显示如下:

http://my-domain.com/index.pl/this

现在让我把它扔出去!

“看”值必须是“友好”。但是,看见可能位于网址的不同位置!

例如:http://my-domain.com/index.pl?foo=that&see=this&bar=that

(可以通过http://www或没有www访问。)

我在这里和其他地方阅读了一些帖子,但没有发现任何用我能理解的例子向我解释这一点。

如果可能的话,我甚至想放弃“.pl”!

抱歉这样的菜鸟......我需要帮助。

这是我拥有的整个htaccess文件:

RewriteEngine on
RewriteRule ^/index.html$ /index.pl [L]
RewriteRule index/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/$ /index.pl?$1=$2&$3=$4&$5=$6

我还试图让index.html指向index.pl

谢谢..

3 个答案:

答案 0 :(得分:2)

如果您正在使用Apache,那么您正在寻找mod_rewrite。它与perl无关:)

http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html

答案 1 :(得分:1)

你可能最好将URL参数传递给脚本并在那里进行剩余的处理,因为它会给你更多的灵活性,你将处理Perl而不是使你的mod_rewrite规则复杂化。 .htaccess文件中的这类内容应该可以解决问题:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^request(/.*)?$ /path/to/index.pl [L]
</IfModule>

RewriteCond指令用于防止重写现有文件和目录的路径。如果您必须删除它们,请确保index.pl的路径不会被重写,或者mod_rewrite将在每个请求中进入循环。

然后,您可以从$ENV{REQUEST_URI}内的index.pl抓取所有内容,将字符串拆分为斜线并验证并适当地分配您的参数。

注意:我建议不要使用index作为请求路径,因为Apache的默认配置可能会覆盖该关键字(就像我的情况一样)。

答案 2 :(得分:-1)

您可以使用REST界面:

http://my-domain.com/index.pl/see/this

http://my-domain.com/index.pl/this

您基本上拥有index.pl脚本(或将其重命名为您想要的任何内容),查看每个请求的URL路径($ ENV {REQUEST_URI})