2011-09-30 85 views
3

我有一个自定义的CMS。除了一件事外,它工作得很好。我想知道如何最好地实现404功能。该网站应该只有以下网址类型如何在.htaccess中写入404规则

index.php?upn=something 

gallery.php?groupId=2 

被附加到URL后的index.php或gallery.php应该抛出404的任何目录。另外,如果在指定upn时没有在数据库中找到内容,我想抛出404。我意识到我可以在PHP中引用标题。但我说过我会试着更全面地了解这个问题。所以如果你有任何信息或指标,我会很感激他们。

+1

“另外我想抛出一个404,如果在数据库中找不到内容”由于您想检查数据库内容,您必须通过PHP发送状态代码,因此无法通过apache conf – KingCrunch

+2

! – undone

+0

谢谢你们,我明白关于php。我确实是在apache之后的第一个位置,并且只是在我需要在php中寻找的任何东西的指针。谢谢。 – jiraiya

回答

1

我想从我的PHP代码编程做到这一点。你可以写一些简单的路由组件,试图找到你想要的。今天,你只是采取行动(index.php?upn=gallery.php?groupId=),但将来有一天你可能会添加一个新的,你应该改变你的.htaccess,这是更困难的。如果您在应用程序层中完成所有操作,则可以将其更改得更简单。

将此代码粘贴到项目根目录下的.htaccess文件中,并将每个请求路由到router.php。一旦你有了这个请求,你就可以决定要采取的行动。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ router.php?url=$1 [QSA,L] 
</IfModule> 

希望它有帮助。

+0

非常感谢我真的很喜欢这个路由器的想法,因为我一直都在为构建数据库查询做类似的操作。很好的答案,感谢一百万。 – jiraiya

+0

不客气。看看CakePHP路由器。它的工作原理就像这样,可以用来查看代码。也许你可以使用别的东西。此外,可能有一些库用于在那里路由 – santiagobasulto

1

你不得不在PHP代码返回404,但你可以在htaccess的设置404处理器,像这样:

ErrorDocument 404 /errors/notfound.html