【问题标题】:URL throwing failed to open stream and header already sent errorURL 抛出未能打开流和标头已发送错误
【发布时间】:2016-12-05 16:37:57
【问题描述】:

我所有的请求都被重写到 index.php。请参阅下面的 .htaccess 文件。

IndexIgnore *

<IfModule mod_rewrite.c>

    #Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

# BEGIN EXPIRES
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 10 days"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/jpg  "access plus 1 month"

    <IfModule mod_headers.c>
        Header append Cache-Control "public"
      </IfModule>
</IfModule>
# END EXPIRES

<FilesMatch “.(ttf|otf|eot|woff)$”>
    <IfModule mod_headers.c>
        Header set Access-Control-Allow-Origin “*”
    </IfModule>
</FilesMatch>

为了调试,我在 index.php 的第 2 行退出。请参阅下面的 index.php

<?php
exit('here');
session_start();
error_reporting(-1);
    .
    .
    .

当我使用这个网址时 -

http://www.example.com/admincp/site/editor/layout?csrf_token=852f2d49ab5d27fd061a164a5e059531&val[page]=feed&val[column]=2&middle[2.23334858434E+12][widget]=content&middle[2.23334858434E+12][settings]=&right[c7ef099029aca9f5d297d79757ea100c][widget]=plugin::ads|ads&right[c7ef099029aca9f5d297d79757ea100c][settings]=&right[eed08f19fa0e3fb7d017e5b32d9eba16][widget]=plugin::blog|latest&right[eed08f19fa0e3fb7d017e5b32d9eba16][settings]=&right[67a8d113cceb768272adedb97e5e349c][widget]=plugin::music|latest&right[67a8d113cceb768272adedb97e5e349c][settings]=&right[31dc5ba68111024770ae8d2f6c12312d][widget]=plugin::page|latest&right[31dc5ba68111024770ae8d2f6c12312d][settings]=&right[d66d56bf471a39e6e2b4ac58b4733304][widget]=plugin::video|latest&right[d66d56bf471a39e6e2b4ac58b4733304][settings]=

一切正常,即“这里”显示在浏览器中

但是当我使用这个网址时 -

http://www.example.com/admincp/site/editor/layout?csrf_token=852f2d49ab5d27fd061a164a5e059531&val%5Bpage%5D=feed&val%5Bcolumn%5D=2&middle%5B2.23334858434E%2B12%5D%5Bwidget%5D=content&middle%5B2.23334858434E%2B12%5D%5Bsettings%5D=&right%5Bc7ef099029aca9f5d297d79757ea100c%5D%5Bwidget%5D=plugin%3A%3Aads%7Cads&right%5Bc7ef099029aca9f5d297d79757ea100c%5D%5Bsettings%5D=&right%5Beed08f19fa0e3fb7d017e5b32d9eba16%5D%5Bwidget%5D=plugin%3A%3Ablog%7Clatest&right%5Beed08f19fa0e3fb7d017e5b32d9eba16%5D%5Bsettings%5D=&right%5B67a8d113cceb768272adedb97e5e349c%5D%5Bwidget%5D=plugin%3A%3Amusic%7Clatest&right%5B67a8d113cceb768272adedb97e5e349c%5D%5Bsettings%5D=&right%5B31dc5ba68111024770ae8d2f6c12312d%5D%5Bwidget%5D=plugin%3A%3Apage%7Clatest&right%5B31dc5ba68111024770ae8d2f6c12312d%5D%5Bsettings%5D=&right%5Bd66d56bf471a39e6e2b4ac58b4733304%5D%5Bwidget%5D=plugin%3A%3Avideo%7Clatest&right%5Bd66d56bf471a39e6e2b4ac58b4733304%5D%5Bsettings%5D=

我收到以下错误。

警告:未知:无法打开流:中没有这样的文件或目录 第0行未知

警告:无法修改标头信息 - 标头已发送 第0行未知

请注意,这只发生在特定服务器上。这两个 URL 在其他服务器和 localhost 上的工作方式和行为方式相同。两个 URL 之间的区别只是 url 编码。

我不能使用第一个 URL,因为当我使用 form.AjaxSubmit() 函数时,jQuery 会自动对我的请求正文进行编码。

【问题讨论】:

    标签: php jquery ajax apache .htaccess


    【解决方案1】:

    mod_rewrite 在映射它们之前必须取消转义 URL,所以 反向引用在应用时未转义。使用 B 标志,反向引用中的非字母数字字符将被转义

    所以尝试使用 B 标志

    RewriteRule ^ index.php [B,L]
    

    RewriteRule Flags

    其他可能的解释和解决方法可以在这里找到:http://dracos.co.uk/code/apache-rewrite-problem/

    【讨论】:

    • 修改flag并重启Apache后问题未解决。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多