我使用以下代码将所有请求重定向到index.php
:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
我无法学习OOP但是我创建了一个非常简单且有效的自定义框架来管理访问者的url请求。逻辑是
if ( Is site under maintenance? )
{
display "under maintenance page" if answer is true;
}
else if ( if page exist physically or I know that url has a valid content )
{
display related content;
}
else
{
display custom404.php
}
我知道.htaccess
可以用于自定义404页面目标但我要学习。我也在这里和谷歌搜索,但找不到相关的文章。这是我的3个问题。
问候
问-1
这种方法是否意味着“将不存在真正的404错误页面”? (对不起真正的期限,但希望你明白。我找不到一个更好的术语。)
问-2
这种方法对搜索引擎机器人有不利之处吗?
问-3
这种做法有什么不利之处必须要知道吗? (我的意见不是,但我离专家很远。)
答案 0 :(得分:2)
Q1:这是一个很好的解决方案。如果需要,您还应该返回404标题,并显示包含所需内容的页面:
<?php
header("HTTP/1.0 404 Not Found");
// here you display content you want
Q2:不,它没有。当然,如果由于任何原因你改变你的网站结构和许多链接直接到未发布的页面,你应该考虑为他们制作301重定向到正确的页面而不是显示404页面(这对用户和搜索引擎有利)
问题3:不,它不是
答案 1 :(得分:1)
这应该有用,但是对于Q-2,你应该包含一个404标题(header("HTTP/1.0 404 Not Found");
),以便搜索引擎知道页面不存在,并且他们不会更深入地抓取那个网址。
问题1,因为您的.htaccess屏蔽了对index.php的所有请求,所以没有服务器构建404页面,这就是您在自定义404页面上需要404标头的原因。
问题3我没有看到这样做的任何问题:)
答案 2 :(得分:1)
我和Caweren和Marcin在一起,我想要添加的唯一内容是安全性考虑: 使用这种方法,你应该非常小心地检查“如果页面存在物理”和“之前加载相关内容”的方式,让我解释一下: 如果您使用file_get_contents检查并检索内容,攻击者可以执行
index.php?q=http://mr_bean_photo
他会对你的网站造成污损。这也可以用于从其他网站提交池,或者像代理一样提交第三次网站登录:
index.php?q=http://anotherwebsite.com/login.php?user=admin&password=admin
然后第3页的请求将来自您的网络服务器,所以请小心。
如果您通过fopen或类似内容检查内容,请确保不能包含本地文件系统:
index.php?q=/etc/passwd
这也可用于检索私有证书密钥,因此也要小心。
当然攻击者应该知道你正在重定向到index.php?q =,但是有很多应用程序可以找到它(当然是常用的)。