【发布时间】:2016-07-06 13:48:02
【问题描述】:
亲爱的程序员们晚上好,
我正在尝试使用 .htaccess 重定向来处理没有文件扩展名的 URL,这些文件扩展名对于普通互联网用户来说更易读,例如 http://example.com/file 到 http://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是不必要的。