如果重写映射不存在则返回 404
我创建了一个运行良好的重写映射:
.htaccess
RewriteRule ^([^/\.]+)/?$ index.php?page=${mymap:$1} [L]
mymap .txt
home 1
about 2
contact 3
所以 www.myurl/home 工作正常,但 www.myurl/nonexistant_page 在 mymap.txt 中不存在,所以我收到 SQL 错误。有没有办法检查地图是否存在以及是否存在 404 页面?
I've created a rewrite map that's working well:
.htaccess
RewriteRule ^([^/\.]+)/?$ index.php?page=${mymap:$1} [L]
mymap.txt
home 1
about 2
contact 3
So www.myurl/home works fine, but www.myurl/nonexistant_page doesn't exist in mymap.txt so I get an SQL error. Is there a way to check if the map exist and if not got to 404 page?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当映射中的键和值之间没有对应关系时,您可以指定默认值。
然后,您可以使用此默认值通过测试名为
page
的 query_string 键来触发 index.php 页面中的404
调用。默认情况下,
default_value
是空字符串。这可以解释为什么如果你的index.php页面使用空参数进行SQL查询,你会得到一个SQL错误。You can specify a default value when there is no correspondence between key and values in your map.
Then you can use this default value to trigger the
404
call in your index.php page by testing the query_string key calledpage
.By default, the
default_value
is the empty string. That may explain why you get an SQL error if your index.php page makes an SQL query with empty argument.我无法强调这一点有多重要:不要在没有先对其进行清理的情况下将页面 ID 放入 SQL 查询的末尾。
不管怎样,也许用 try/catch 包围你的 SQL 查询,并在捕获 SQL 异常时发送 404 标头。
I can't stress how important it is that you don't just slap the page ID into the end of your SQL query without sanitizing it first.
Anyway, perhaps surround your SQL query with a try/catch and send a 404 header in the event that an SQL Exception is caught.