我正在尝试将所有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
没有?
答案 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页面非常聪明,所以也许是时候才能发挥创意。