【发布时间】:2014-03-03 11:25:14
【问题描述】:
我正在使用 .htaccess 文件从网页中删除文件扩展名 (.php)。我在这个网站上使用的代码如下:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
# turn off index.php for home page
RewriteRule ^index\.php/?$ / [L,R=301,NC]
## hide .php extension snippet
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
到目前为止,一切都很好,但是,一些网页有 $Session 变量,而 .htaccess 文件阻止了这些变量的传递。需要 seesion 变量的页面根本不会显示,即使提供正确的登录详细信息,它们也是完全空白的。我检查了正确定位 session_start() 的语法,该语法出现在相应页面的开头,如下所示:
<?php
session_start();
?>
在我添加 .htaccess 文件之前一切正常。
阅读了一些 Apache 文档后,我意识到我需要包含 [QSA] 选项。我试图在上面包含这个,但是,我得到的只是 500 个错误。
有人能指出我需要在上面包含 QSA 的地方吗?
问候,
鲍勃
大家好,
感谢您的意见。正如我经常说的那样,保持简单。解决方案是如此明显,我忽略了它。我在 RewriteBase /
之后添加了以下内容RewriteCond %{REQUEST_URI} !^/checklogin\.php$
基本上排除了包含文件传递它的参数。瞧瞧!
我希望这可以帮助其他人解决会话问题。
一切顺利,
鲍勃
【问题讨论】:
-
空白页通常意味着出现了致命错误。启用 error_reporting:
ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(-1);并告诉我们您收到了哪些错误。并检查您的 apache error_log 中的500。 -
这是提交表单后加载的脚本的日志:注意:未定义索引:/www/sites/020/c16/www.lbfl.co.uk/web/checklogin 中的 myusername。第 13 行的 php 注意:未定义的索引:第 16 行的 /www/sites/020/c16/www.lbfl.co.uk/web/checklogin.php 中的 mypassword 注意:未定义的索引:/www/sites/020/ 中的废话c16/www.lbfl.co.uk/web/checklogin.php 在第 19 行所以它没有从表单中传递变量?该页面位于 www.lbfl.co.uk/client-pages.php
-
未定义的索引不会抛出 500。您的日志文件中还有什么?请编辑您的问题。阅读评论中的日志太可怕了。
-
你不需要
QSA flag并尝试先注释掉RewriteRule ^index\.php/?$ / [L,R=301,NC]规则。 -
只是为了澄清:会话 ID 通常存储在 cookie 中,而不是 GET 变量中(取决于您的 php.ini)。所以 Apache 重定向应该对会话没有影响。