简单的htaccess重写规则的奇怪行为

时间:2015-11-18 17:42:33

标签: .htaccess session mod-rewrite redirect rewrite

我在htaccess中使用这个简单的重写规则将任何不存在的文件路径重定向到index.php

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

这完全正常,但我没有什么问题,在index.php文件中有一行可以取消上一个会话:

index.php
.....
session_unset()
.....

现在我有另一个文件register.php使用它自己的会话数据,当我运行register.php它工作正常但会话未设置,似乎首先执行index.php然后register.php !!我通过在index.php中注释掉session_unset()函数来加倍检查,并且会话在register.php中正常工作

发生了什么事?如果在第一个地方没有对index.php进行重定向会怎么回事?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案!这是我见过的最微小和意想不到的错误之一(笑) 当我注意到这只发生在register.php时,我发现问题的原因,之所以在register.php之前调用index.php只是因为错误的css路径:

<link rel="stylesheet" type="text/css" href="stylesheet.css"/>

在我的情况下应该是

<link rel="stylesheet" type="text/css" href="css/stylesheet.css"/>

发生的事情是因为stylesheet.css的路径不存在,服务器会将其重写为index.php然后index.php运行删除所有会话,但因为这只是css包含你不会看到这个你将留在register.php!当路径被修复后,问题就解决了,我每天都学到新东西。