【问题标题】:Is it possible to replace a url with a symlink in perl?是否可以在 perl 中用符号链接替换 ​​url?
【发布时间】:2021-02-01 09:19:52
【问题描述】:

我刚刚花了两天时间重新设计了一个 perl 脚本,它看起来非常好,但我有一个问题……用 perl 编写的日历。 我想防止用户发现我的脚本所在的实际文件夹,这是用 .htacces 完成的,所以在 html 中我可以轻松替换 <!--URL--> with <!../linkname> 但是日历日和月通过 perl 脚本 calendar.cgi 显示: 当用户点击一天或一个月时,它应该将他们带到日历主页,但通过完整的 URL 进行。 使用 html 页面中的符号链接,我可以使 domain.com/filename 转到 domain.com/cgi-bin/folder1/folder2 并且浏览器只会将 domain.com/filename 显示为 url,但日历天/月是用perl写的,所以:

违规行是$temper =~ s/<!--URL-->/$url/gm;

如何替换$temper =~ s/<!--URL--> with <!../linkname>? 如果我以与 html 相同的方式进行操作,则会返回错误。

编辑:错误代码

正则表达式修饰符“/a”和“/l”在 /home/public_html/cgi-bin/messenger/calendar.cgi 第 43 行互斥,在 /home/public_html/cgi- 靠近“=~”语法错误bin/messenger/calendar.cgi 第 43 行,“{..”附近的 /home/public_html/cgi-bin/messenger/messenger.cgi 第 36 行编译失败。

编辑,第 43 行: 这是原来的第 43 行

$temper =~ s/<!--URL-->/$url/gm;

但这会导致链接转到public_html/cgi-bin/folder/folder 我想替换为

$temper =~ s/<!../../filename>/$url/gm;

'filename' 是符号链接,浏览器地址栏将显示 domain.com/filename

编辑:TLP 感谢您的帮助,我不太擅长编码,尤其是 perl,但是当你们帮助我时,我学到了很多东西......就像你给了我信心,直到我得到对的!解决方案比我想象的要容易.....我不得不将/$url/gm;更改为/$xemail/gm;而不是替换&lt;!--URL--&gt; 现在效果很好!

【问题讨论】:

  • "如果我这样做,它会返回一个错误" -- 那么,错误是什么?显示您使用的确切代码,以及显示的确切错误。否则可以肯定地说没有人可以帮助您解决问题。
  • 虽然看起来您确实试图在替换运算符中使用 / 而没有转义它 \/
  • 我很确定你的代码——顺便说一句你还没有显示——说$temper =~ s/&lt;!../linkname&gt;/$url/gm,你可能会注意到/没有转义,这会导致你的替换运营商打破。导致奇怪的错误信息。 (la 都在单词 linkname 中找到)
  • 即在 calendar.cgi 中显示第 43 行
  • 谢谢,我现在就调查一下。我试图发布代码,但它不会让我!

标签: html perl


【解决方案1】:

线

$temper =~ s/<!../../filename>/$url/gm;

无效,因为/ 是替换运算符中的元字符。你必须像这样逃避它:

$temper =~ s/<!..\/..\/filename>/$url/gm;

或者为替换运算符s/// 使用不同的分隔符。你可以使用任何字符,例如|:

$temper =~ s|<!../../filename>|$url|gm;

那你就不用转义/了。

【讨论】:

  • 谢谢,您的解决方案有效,但现在看来我的问题比我想象的要深一些。虽然错误页面消失了,网站又回来了,但日历全都错了!我将不得不更深入地研究这一点。很遗憾,因为网站的其他部分看起来很棒!
  • @oracle 当时有一个错误,您很快就会完成。如果它解决了您提出的问题,请务必将此答案标记为已接受。然后回来询问有关您的代码的更多问题。
  • 您好,非常感谢您的帮助。因为我对 perl 一无所知,所以我不知道它是否不起作用,因为我写错了 url 或者是否发生了一些不同的事情。解决方案是将 $url/gm 更改为 $xemail/gm 但如果没有你的帮助,我永远不会去那里。
  • | 常用于正则表达式模式,因此$temper =~ s{&lt;!../../filename&gt;}{$url}gm;$temper =~ s|&lt;!../../filename&gt;|$url|gm; 更有意义
  • @ikegami 重点是使用与正则表达式中使用的字符不同的分隔符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2019-04-06
  • 2021-09-25
  • 1970-01-01
  • 2018-06-28
  • 2019-07-08
  • 2012-06-17
相关资源
最近更新 更多