我正在尝试使用多个参数创建漂亮的URL,但似乎我无法通过我使用的.htaccess
代码实现它。以下是我的.htaccess
代码
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ index.php?param1=$1¶m2=$2¶m3=$3¶m4=$4 [L,QSA]
我正在制作这样的网址,使其只能访问字母和数字中的参数。还有一些特殊的符号。
这是我正在使用的PHP代码:
if(!empty($_GET))
{
$myFile = "log.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
date_default_timezone_set('Asia/Kolkata');
$data['logTime'] = date('d M Y h:i:s A');
$data['param1'] = $_GET['param1'];
$data['param2'] = $_GET['param2'];
$data['param3'] = $_GET['param3'];
$data['param4'] = $_GET['param4'];
$status = fwrite($fh, json_encode($data)."\n");
fclose($fh);
if($status > 0)
{
deliver_response(200, "success", "Request Successful!");
}
else
{
deliver_response(400, "failed", "Invalid Request!");
}
}
我面临的代码失败在哪里?
我想发出请求,即使没有传递URL参数,也应该在这些变量中传递默认值,以便它可以执行else块
答案 0 :(得分:0)
你的代码工作,我想,我刚刚在我的服务器上测试过,而在日志文件中是txt:
{"logTime":"18 Mar 2018 03:52:58 PM","param1":"value","param2":"value","param3":"value","param4":"value"}
在你对mario的回答中,你使用url作为:
www.test.com/api/index.php?param1=value¶m2=value¶m3=value¶m4=value
尝试使用不带子文件夹** / api / ** index.php或将此文件夹添加到.htaccess文件
答案 1 :(得分:0)
要使用params修复错误,您可以使用if else:
if(!empty($_GET['param1'])) {
$data['param1'] = $_GET['param1'];
} else {
$data['param1'] = "nothing1";
}
if(!empty($_GET['param2'])) {
$data['param2'] = $_GET['param2'];
} else {
$data['param2'] = "nothing2";
}
if(!empty($_GET['param3'])) {
$data['param3'] = $_GET['param3'];
} else {
$data['param3'] = "nothing3";
}
if(!empty($_GET['param4'])) {
$data['param4'] = $_GET['param4'];
} else {
$data['param4'] = "nothing4";
}
在你的.htaccess文件中添加文件夹api为
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/api/?$ index.php?param1=$1¶m2=$2¶m3=$3¶m4=$4 [L,QSA]
当然你还需要将index.php和你的log.txt文件移动到这个文件夹。