【发布时间】:2013-06-11 14:16:15
【问题描述】:
更新:这可行:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{THE_REQUEST} ^[A-Z]+\ ([^\s]+)
RewriteRule (.+) /index.cfm?event=checkuri&uri=%1 [QSA]
一些背景...
所以我们已经在我们的 .htaccess 文件中有一个包罗万象的重定向:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) /index.cfm?event=checkuri&uri=$1
这与检查 URI 是否匹配的数据库表相关联。所以如果我们只是移动了一个曾经有这个页面的网站:
/some-awesome-article.html
进入我们的系统,新地址是
/awesome-article/12442
有人试图访问旧的 URI,我们的系统会检查这个,找到一个匹配,然后将他们转发到新的主页:/awesome-article/12442
这个系统非常棒,但有一个例外。如果 URI 类似于 /index.php?id=123412,那么整个系统就会崩溃。事实上 /index.php/whatever 也不起作用。
除此之外,其他一切都有效。我们不将 PHP 用于我们的 Web 应用程序(尽管支持人员在服务器某处的管理控制台中说它)。
所以基本上我需要的是,如果在任何地方检测到 index.php,它将把 URI 转发到我们的 现有系统:
我该如何修改它来修复它?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.+) /index.cfm?event=checkuri&uri=$1
【问题讨论】:
-
是您试图将原始查询字符串(在您的示例中为
id=123412)作为附加参数传递给 index.cfm 的问题吗? -
迈克,我认为你很接近。在测试这个 IS 工作但他们查询字符串没有通过。所以 index.php 本身确实有效。但是一旦你添加了查询字符串参数,它就会失败所以看起来我们需要做的就是改变这个: RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.+) /index.cfm?event=checkuri&uri=$1 to ALSO pass沿着查询参数。不知道到底是怎么回事。
标签: php apache mod-rewrite