.htaccess RedirectMatch条件正则表达式失败

时间:2016-03-19 21:42:23

标签: regex .htaccess redirect

亲爱的同事们,晚上好,

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

不幸的是我无法使用mod_rewrite,但是虽然重定向确实有效,但它似乎无法正确处理我的请求。

要处理我尝试使用

的任何指定网址
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中所示),显然会产生不存在文件的错误。

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

1 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

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

这与URL匹配,前提是URL中没有点(即.php)。因此阻止了重定向循环。

如评论中所述,您不需要对查询字符串执行任何特定操作,只要您希望它不会更改地传递到目标。查询字符串不存在于RedirectMatch指令与之匹配的URL路径中。因此,查询字符串的任何操作需要 mod_rewrite。