【问题标题】:RewriteRule for URLs that do not end with dot html/php不以点 html/php 结尾的 URL 的 RewriteRule
【发布时间】:2011-05-25 14:52:23
【问题描述】:

我想全部重定向:

<a href="filename"></a>

<a href="get.php?filename"></a>

我已经开始了

RewriteRule  !\.(html|php)$  /get.php?file=$1 [PT]

但它不起作用。

【问题讨论】:

  • 按照你的说法,我认为你需要一个包含非捕获前瞻/后瞻断言的正则表达式......这些会让你头晕目眩!

标签: apache mod-rewrite url-rewriting


【解决方案1】:

我已经在 PHP 中测试了这个正则表达式 它应该可以在 mod_rewrite 中工作,但我还没有测试过并且似乎也可以在 mod_rewrite 中工作:

RewriteRule ^(.+)(?<!\.php)(?<!\.html)$ /get.php?file=$1

该规则将重写除以 .php.html 结尾的所有 URL。

【讨论】:

  • myhost.tm/filesmyhost.tm/files 之类的如何过滤?
  • 它将myhost.tm/files 重写为myhost.tm/get.php?file=files,但不会重写myhost.tm/files.php。我希望这是你想要的。
  • 是的,完全正确。我将我的 get.php 移动到单独的目录,因此重写规则不会对其起作用。谢谢。
【解决方案2】:

最基本的处理方式是:

RewriteRule ^(.*)$ get.php?file=$1 [QSA,L]

这将重定向所有内容,将 file 设置为路径的值。

【讨论】:

  • 谢谢,但这不起作用,它会在规则中带来无限循环。
  • @Arman:不应该这样做,除非你没有在上面放置[L] 位,或者之后使用重定向。
  • 是的,我的失败,我将 get.php 移到了单独的文件夹中,它开始工作了。谢谢。
猜你喜欢
  • 2013-01-13
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多