【问题标题】:.htaccess RedirectMatch conditional regex fails.htaccess RedirectMatch 条件正则表达式失败
【发布时间】:2016-07-06 13:48:02
【问题描述】:

亲爱的程序员们晚上好,

我正在尝试使用 .htaccess 重定向来处理没有文件扩展名的 URL,这些文件扩展名对于普通互联网用户来说更易读,例如 http://example.com/filehttp://example.com/file.php(有或没有查询)

很遗憾,我无法使用 mod_rewrite,但虽然重定向确实有效,但似乎无法正确处理我的请求。

处理我尝试使用的任何给定 URL

RedirectMatch ^/(?(?=.*\.php(?i).*)|(\w+)(.*)) /$1.php$2

RedirectMatch ^/.*\.php(?i).*|(\w+)(.*) /$1.php$2

除了使用$2$3,假设行为可能会提取与所有知识相反的第一个模式。

它应该提取$1 的字符和数字以及$2 的所有其他内容(以? 开头用于查询等),除非它包含文件扩展名.php。

使用https://regex101.com/r/zF2bV9/2 验证正则表达式一切都应该可以正常工作,但是将这些行之一实现到.htaccess 文件名将用“.php”替换任何给定文件(如http://example.com/.php)并且显然会产生错误一个不存在的文件。

我对代码或重定向功能缺少什么?

【问题讨论】:

  • "以及 2 美元的其他所有内容(以 ? 开头用于查询等)" - 请注意,RedirectMatch 仅与 URL 路径匹配。您无法匹配查询字符串。但您也不需要这样做,因为它会原封不动地传递给目标。
  • @w3dk 碰巧在另一个服务器配置中与RedirectMatch ^/(\w+)(.*) /$1.php$2 一起正常工作,但现在这将导致无限循环。我说得对吗,那 2 美元根本就没有必要吗?不幸的是,当第一个问题发生时,我无法对其进行测试。
  • 特定的 URL 可能会影响这一点,但不会影响“服务器配置”。该指令总是会导致像/file 这样的 URL 无限循环。是的,$2 是不必要的。

标签: regex .htaccess redirect


【解决方案1】:

你可以试试这样的:

RedirectMatch ^/([^.]+)$ /$1.php

如果 URL 中还没有点(即.php),这与 URL 匹配。这样可以防止重定向循环。

如 cmets 中所述,您无需对查询字符串执行任何特定操作,只要您希望它原封不动地传递到目的地。无论如何,RedirectMatch 指令匹配的 URL 路径中不存在查询字符串。因此,查询字符串的任何操作都将需要 mod_rewrite。

【讨论】:

  • 不幸的是,他对我也不起作用。我的自定义错误消息出现 404 错误。但是地址行保持输入,我发现令人困惑。也许我把整个重定向的事情弄错了?感谢您的查询主题!
  • 如果“地址行保持键入”,那么上面的 RedirectMatch (mod_alias) 指令没有做任何事情。你要什么网址? .htaccess 中还有其他指令吗?你还有其他.htaccess 文件吗?大概该指令将进入文档根目录中的.htaccess 文件?大概这些“没有文件扩展名的网址”只是您的用户的快捷方式?您的应用程序仍在使用完整的带有扩展名的 URL?
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多