我正在尝试处理没有使用.htaccess重定向的普通互联网用户可读的文件扩展名的网址,例如http://example.com/file
到http://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
中所示),显然会产生不存在文件的错误。
我对代码或重定向功能缺少什么?
答案 0 :(得分:0)
您可以尝试以下内容:
RedirectMatch ^/([^.]+)$ /$1.php
这与URL匹配,前提是URL中没有点(即.php
)。因此阻止了重定向循环。
如评论中所述,您不需要对查询字符串执行任何特定操作,只要您希望它不会更改地传递到目标。查询字符串不存在于RedirectMatch
指令与之匹配的URL路径中。因此,查询字符串的任何操作都需要 mod_rewrite。