【发布时间】:2016-02-16 23:48:38
【问题描述】:
我正在基于我也在构建的 MVC 框架上构建一个 CMS,但我被困在这里。完整代码可以在this link to github找到。
好的,我遇到的问题是这个 .htaccess 文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond %{REQUEST_METHOD} !POST [NC]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
当我通过这个 ajax 请求在“auth/login”上运行代码时:
$.ajax({
type: "POST",
url: "auth/login",
dataType: "json",
data: { username: username, password: password, token: token_value }
})
当我跑步时:
$username = $_POST['username'];
$password = $_POST['password'];
$token = $_POST['token'];
$postdata = array('username' => $username, 'password' => $password, 'token' => $token);
print_r($post_data);
print_r($_SERVER);
我明白了:
Array (
[username] =>
[password] =>
[token] =>
)
Array(
[REDIRECT_REQUEST_METHOD] => POST
[REDIRECT_STATUS] => 404
[HTTP_HOST] => [omitted]
[HTTP_CONNECTION] => keep-alive
[CONTENT_LENGTH] => 71
[HTTP_ACCEPT] => application/json, text/javascript, */*; q=0.01
[HTTP_ORIGIN] => [omitted]
[HTTP_X_REQUESTED_WITH] => XMLHttpRequest
[HTTP_USER_AGENT] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
[CONTENT_TYPE] => application/x-www-form-urlencoded; charset=UTF-8
[HTTP_REFERER] => [omitted]/auth
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8,fr;q=0.6
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[SERVER_SIGNATURE] => <address>Apache/2.4.7 (Ubuntu) Server at [omitted] Port 80</address>
[SERVER_SOFTWARE] => Apache/2.4.7 (Ubuntu)
[SERVER_NAME] => [omitted]
[SERVER_ADDR] => [omitted]
[SERVER_PORT] => 80
[REMOTE_ADDR] => [omitted]
[DOCUMENT_ROOT] => [omitted]
[REQUEST_SCHEME] => http
[CONTEXT_PREFIX] =>
[CONTEXT_DOCUMENT_ROOT] => [omitted]
[SERVER_ADMIN] => webmaster@localhost
[SCRIPT_FILENAME] => [omitted]/public_html/index.php
[REMOTE_PORT] => 60135
[REDIRECT_URL] => /auth/login
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /auth/login
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME_FLOAT] => 1447625662.493
[REQUEST_TIME] => 1447625662
)
我知道上面的代码块有效,因为我已经在静态“test.php”文件上尝试过它,它会输出此 ajax 请求提交的用户名/密码/方法信息。
我真的觉得问题出在我的 .htaccess 文件中,因为当我强制使用 200 OK 标头时,它仍然认为它是 404 还是什么?我不确定,但它正在擦洗 $_POST。此问题与我的 php.ini 或 apache2.conf 无关,因为我已经对其进行了测试并且我能够接收发布数据,而不是与我一直发送的 ErrorDocument 404 /index.php它到。这是我在解析要发送到控制器的 URL 时用来防止出现 404 页面的方法。
任何帮助将不胜感激!
【问题讨论】:
-
我假设 mod_rewrite 处于活动状态。您的
.htaccess文件中必须有更多内容。你那里没有任何重定向,只有一个重写。最后还有一个悬空的RewriteCond。 -
@OlafDietsche 实际上,在您发布此内容后,我回去检查我是否激活了 mod_rewrite,结果证明这是正确的答案。您应该考虑将其作为主要答案发布,我会将 i 标记为正确答案。我敢肯定,遇到这个问题的人比我多。
-
我很高兴我的评论有所帮助。你是allowed and encouraged to answer your own question。
标签: php ajax apache .htaccess mod-rewrite