PHP で基本的な REST スタイルの API を作成しようとしていますが、奇妙な問題が発生しています。URL /rest/viewinput.php から自分のページ (viewinput.php) の 1 つにアクセスすると、ページが正常に読み込まれます。/rest/viewinput を試すと、「ページが見つかりません」というエラーが表示されます。
リクエストのタイプと送信先を決定するコードは次のとおりです。これは私のserver.phpページにあります
//in server.php
public function serve() {
$uri = $_SERVER['REQUEST_URI'];
$method = $_SERVER['REQUEST_METHOD'];
$paths = explode('/', $this->paths($uri));
array_shift($paths); //
$resource = array_shift($paths);
if ($resource == 'rest') {
$page = array_shift($paths);
if (empty($page)) {
$this->handle_base($method);
} else {
$this->handle_page($method, $page);
}
}
else {
// We only handle resources under 'clients'
header('HTTP/1.1 404 Not Found');
}
}
ページ名が決まっているGETメソッドなので、この関数に渡されます
//in server.php
private function handle_page($method, $page) {
switch($method) {
case 'GET':
if($page == "viewinput"){ //I have both viewinput.php and viewinput just to check both. Only viewinput.php works
$this->display_info();
}
if($page == "viewinput.php"){
$this->display_info();
}
default:
header('HTTP/1.1 405 Method Not Allowed');
header('Allow: GET, PUT, DELETE');
break;
}
}
ここから次に送信されます
//in server.php
function display_info(){
$view = new ViewInputs();
$view->view(); //this function is on viewinput.php
}
そのため、/rest/viewinput.php にアクセスすると、ビュー関数が正しく表示されます。/rest/viewinput にアクセスすると、「壊れたリンク」エラーが発生します。
私はRESTサーバーのFound Hereのオンラインチュートリアルに従いましたが、うまくいきました。
以下は私のhttpd.confファイルにあります
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^/.* rest/server.php
これは私の viewinput.php ファイルです。正しく動作していると思います (ページが読み込まれると、server.php の serve 関数が実行されるはずです。
<?
include_once 'server.php';
class ViewInputs{
function view(){
$sql = mysql_query("select * from entry");
?>
<table>
<th>ID</th>
<th>Text</th>
<col width="200">
<col width="150">
<?
while ($result = mysql_fetch_array($sql)){
?>
<tr><td><? echo $result['id']." "; ?></td><td><? echo $result['text']; ?></td></tr>
<?
}
?> </table> <?
}
}
$server = new server();
$server->serve();
?>
httpd.conf から。私は間違っているかもしれませんが、これが .htaccess ファイルを許可する方法だと思います
DocumentRoot "C:/xampp/htdocs/rest"
<Directory />
Options FollowSymLinks
AllowOverride ALL
Order deny, allow
Deny from none
</Directory>
<Files ".ht*">
Require all ALLOW
</Files>