You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-Slim-Restful API调用/api/signup报404,疑为httpd.conf配置问题

Troubleshooting 404 Error on /api/signup PHP Slim REST API

Let's break down the potential issues step by step—since other files load fine, we can narrow the problem down to rewrite rules, Slim routing setup, or Apache module configuration.

1. Ensure mod_rewrite is Enabled

First off, Apache's mod_rewrite module needs to be active for your .htaccess rules to work. If it's disabled, rewrite logic won't kick in at all.

  • Check if it's running with this command:
    sudo apachectl -M | grep rewrite
    
  • If you don't see rewrite_module (shared) in the output, enable it and restart Apache:
    sudo a2enmod rewrite
    sudo systemctl restart httpd
    

2. Uncomment and Verify RewriteBase in .htaccess

Your .htaccess has RewriteBase /api/ commented out. If your API lives under /var/www/html/api/ (so the full URL is http://yourdomain/api/signup), you need to uncomment this line—it tells Apache where to apply the rewrite rules relative to your document root.

Update your .htaccess to this:

RewriteEngine On
RewriteBase /api/
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

3. Double-Check Slim Routing Configuration

Even if Apache routes correctly, a missing or misconfigured Slim route will throw a 404. Make sure your index.php in the /api directory has a route defined for /signup, using the correct HTTP method (most signup endpoints use POST):

<?php
use Slim\Factory\AppFactory;

require __DIR__ . '/vendor/autoload.php';

$app = AppFactory::create();

// Confirm this route exists and matches your request method
$app->post('/signup', function ($request, $response, $args) {
    // Your signup logic here
    $response->getBody()->write("Signup endpoint is reachable");
    return $response;
});

$app->run();
  • Note: If you're sending a GET request to a POST-only route, you'll get a 404 or "method not allowed" error—double-check your request method matches the route.

4. Fix Directory Permissions and Ownership

Apache needs read access to your /api directory and its files. Fix permissions with these commands:

# Set ownership to Apache's user/group
sudo chown -R apache:apache /var/www/html/api
# Set safe directory/file permissions
sudo chmod -R 755 /var/www/html/api
sudo chmod 644 /var/www/html/api/*.php

5. Verify Apache's Directory Configuration for /api

Your httpd.conf allows AllowOverride All for /var/www/html, which should apply to subdirectories like /api, but double-check:

  • There are no conflicting <Directory> blocks in conf.d/*.conf that set AllowOverride None for /var/www/html/api
  • No other rules are overriding your rewrite logic

6. Test Rewrite Logic with a Simple File

Create a test file /var/www/html/api/test.php with:

<?php echo "API directory is accessible!"; ?>
  1. Visit http://yourdomain/api/test.php to confirm the directory works.
  2. Then visit http://yourdomain/api/test (without the .php extension)—if this shows the test content, your rewrite rules are working, and the issue is definitely in your Slim routing.

If you still get a 404 after these steps, check Apache's error log (/etc/httpd/logs/error_log)—it will give specific details about why the request failed (e.g., missing file, rewrite rule error, etc.).

内容的提问来源于stack exchange,提问作者ChinaXiaoHong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:23:54