如何使用cPanel URL将所有404重写为index.php?

时间:2014-02-07 01:17:56

标签: apache .htaccess url-rewriting http-status-code-404 cpanel

我正在尝试将所有404重写为index.php,其中我使用PHP的parse_url()来确定要包含的文件(例如about-us.php,contact-us.php)并且我得到了一些非常奇怪的结果。

我正在处理由cPanel自动创建的'dev'网址: http://xxx.xxx.xxx.xxx/~mySite/

当前方法

我的.htaccess文件包含以下内容:

RewriteEngine on
RewriteBase /~mySite
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-_.]+)$ index.php

结果很混乱:

xxx.xxx.xxx.xxx/~mySite/contact-us渲染得很好。

xxx.xxx.xxx.xxx/~mySite/contact-us/phone会抛出未被mod_rewrite抓住的404。

xxx.xxx.xxx.xxx/~mySite/about-us重写 server root(xxx.xxx.xxx.xxx/index.php)。

以前尝试

ErrorDocument 404 /~mySite/index.php

我得到了类似的结果,除了以下内容:

xxx.xxx.xxx.xxx/~mySite/contact-us/phone重写为index.php,但我的所有CSS和JS包含都已关闭,因为他们试图相对于/~mySite/contact-us而不是/~mySite加载。

有任何帮助吗?我想出去了。特别是contact-us工作正常,但about-us没有?

1 个答案:

答案 0 :(得分:1)

首先不要使用cPanel预览。这不是查看您的开发站点的好方法。谁知道它会如何影响规则。无论如何,控制面板也会做奇怪的事情。

使用您的real site域名预览您的网站。您可以这样做我修改您计算机上的HOST文件,以便只有您可以通过域名查看它。这个little guide会告诉您如何编辑它。大概需要2分钟。

然后这应该有助于更好地检查事情。

错误文档很可能无效,因为〜mySite很可能不是您的文档根目录。这通常是cpanel如何进行预览链接。因此,您的真实错误文档可能应该像Marc B所说的那样。

ErrorDocument 404 /index.php

如果你想要一个mod_rewrite解决方案,这也应该有效。但我不会同时使用它们。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ / [R=301,L]

另一方面,我认为使用404页面通常是好的,这样用户就知道所请求的页面不是真正的页面,而不是有些人认为你的网站出了问题,因为它重定向到主页。就像Facebook一样,它会给你一个大拇指,上面写着绷带,说它没有页面。我见过很多自定义的404页面非常聪明,所以也许是时候才能发挥创意。