网址丢失无法打开流,标头已发送错误

时间:2016-12-05 16:37:58

标签: php jquery ajax apache .htaccess

我的所有请求都被重写为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]=

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

但是当我使用这个URL时 -

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会自动对我的请求体进行编码。

1 个答案:

答案 0 :(得分:0)

  

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

请尝试使用B标志

RewriteRule ^ index.php [B,L]

RewriteRule Flags

其他可能的解释和解决方案可在此处找到:http://dracos.co.uk/code/apache-rewrite-problem/