【发布时间】:2015-10-22 12:55:37
【问题描述】:
我有一个带有 add-post.php 页面的博客,其中包含一个带有操作的简单表单:
<form id="form" action="add-post-php.php" method="POST" enctype="multipart/form-data">
然后,我将文件 add-post-php.php 与 add-post.php 放在同一文件夹中。所以我在表单中输入了我博客的详细信息,然后按提交并获取:
禁止
您无权访问此服务器上的 /add-post-php.php。
此外,在尝试访问时遇到 404 Not Found 错误 使用 ErrorDocument 来处理请求。
- 我已经在我的本地主机上测试过了,它工作正常
- 文件的权限设置为0644,但我也试过在0755,没有改善。
- 我的 .htaccess 文件没有问题,目录中也没有其他 .htaccess 文件。
- 我尝试在我的表单
action中使用完整的 url 路径
我的add-post-php.php 完整脚本是:
<?php
include("php/settings.php"); // Contains DB Connections
?>
<?php
$id= time();
$month = date("m");
$year = date("Y");
$path = "images/posts/$year/$month/";
$section = $_POST["section"];
$category = $_POST["category"];
$credit = $_POST["credit"];
$title = ucwords($_POST["title"]);
$text = $_POST["text"];
$exclusive = $_POST["exclusive"];
$added = date("Y-m-d H:i:s");
$photo = $_FILES["photo"]["name"];
$ext = substr(strrchr($photo, '.'), 1);
?>
<?php
$insert_sql = "INSERT INTO posts (id, section, category, credit, title, article, exclusive, added) VALUES('$id', '$section', '$category', '$credit', '$title', '$text', '$exclusive', '$added')";
$insert_res = mysqli_query($con, $insert_sql);
if(mysqli_affected_rows($con)>0){
move_uploaded_file($_FILES["photo"]["tmp_name"],"$path" . $id . "." . $ext);
}
else{
echo "0";
exit();
};
?>
<?php
header("Location: post.php?id=$id");
exit();
?>
这是我的 .htaccess:
Options -MultiViews
DirectoryIndex posts.php
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^posts/([0-9]+)/?$ posts.php?currentpage=$1 [NC,L,QSA]
RewriteRule ^section/([\w-]+)/?$ section.php?section=$1 [NC,L,QSA]
RewriteRule ^section/([\w-]+)/([0-9]+)/?$ section.php?section=$1¤tpage=$2 [NC,L,QSA]
RewriteRule ^posts/([\w-]+)/?$ posts.php?category=$1 [NC,L,QSA]
RewriteRule ^posts/([\w-]+)/([0-9]+)/?$ posts.php?category=$1¤tpage=$2 [NC,L,QSA]
RewriteRule ^post/([0-9]+)/([\w-]+)/?$ post.php?id=$1&title=$2 [NC,L,QSA]
RewriteRule ^sites/([0-9]+)/?$ sites.php?currentpage=$1 [NC,L,QSA]
RewriteRule ^posts posts.php
RewriteRule ^section section.php
RewriteRule ^sites sites.php
RewriteRule ^about about.php
RewriteRule ^advertise advertise.php
RewriteRule ^subscribe subscribe.php
及文件夹结构:
我检查了php error log,没有任何可疑之处。有谁知道为什么当文件明确存在并且权限正确时我会收到禁止错误?
【问题讨论】:
-
对不起@Epodax,这是一个打字错误,它是
add-post.php -
你的代码很容易被SQL注入,使用parameter binding。此外,您可能还想使用 filter_input 验证您的 POST 输入,并带有适当的标志。
-
我现在不关心 SQL 注入 @HugoZink,原始脚本使用
mysqli_real_escape_string但我在解决手头的问题时暂时删除了它们
标签: php apache .htaccess http-status-code-404 http-status-code-403