我正在尝试捕获以下形式的旧网址:
http://www.example.com/mpn_engine.php%3Ffamilyname%3Djiyalal+goswami%26menuopt%3D2%26submenuopt%3D1%26Search%3Dstuff
在我的.htaccess文件中,在各种明智的StackOverflowers的帮助下,由于RegEx对我来说很陌生,我已安排捕捉PHP脚本' mpn_engine.php' (.php3和更新的.php副本)无论在哪里(在任何子文件夹中)都可以将访问者重定向到索引页面。
RewriteRule (^|/)mpn_engine\.php$ /index.html? [L,NC,R=301]
RewriteRule (^|/)mpn_engine\.php3$ /index.html? [L,NC,R=301]
我发现的奇怪的事情是,上面似乎有用,因为我正在寻找精确的php文件,或者如果我提供表格的传统参数:
http://www.example.com/lang/mpn_engine.php?x=fred
但是,只要我用问号代替百分号,即如下所示:
http://www.example.com/lang/mpn_engine.php%x=fred
重写失败,&而且我得到了不可预知的结果,通常是一个404,但偶尔会有一个糟糕的网关#。
如何重写此ReWriteRule以在可能查找的任何文件夹中捕获此.php文件,并使用任何尾随字符(包括百分号),并将其正常重定向到索引页?
谢谢!
答案 0 :(得分:1)
您的问题有很多子问题:
如果您想要覆盖任何尾随字符,那么您可以对重写规则进行两次更改之一:
删除结尾的$:
RewriteRule (^|/)mpn_engine\.php /index.html? [L,NC,R=301]
或
在" php":
之后添加一个通配符 RewriteRule (^|/)mpn_engine\.php(.*)$ /index.html? [L,NC,R=301]
在第一种情况下,如果$ present,这告诉Apache只有匹配,如果" php"位于URL的末尾。在第二种情况下,这告诉Apache匹配if" php"后面是URL末尾的零个或多个任何其他字符。在任何一种情况下,你都不需要你的第二次重写规则" php3" - 上述任何一个都将匹配这些实例。