在根目录中我有文件:.htaccess 和 page.php 在 /test/ 子文件夹中我有文件:define_session.php 和 write_session.php
.htaccess 文件:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)/(.*)?$ page.php?p1=$1&p2=$2&p3=$3 [L,QSA]
# www.example.com/parameter1/parameter2/parameter3/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)?$ page.php?p1=$1&p2=$2 [L,QSA]
# www.example.com/parameter1/parameter2/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ page.php?p1=$1 [L,QSA]
#www.example.com/parameter1/
页面.php
<?php
echo "Hello World";
//session_start();
//session_destroy();
?>
/测试/session_define.php
<?php
session_start();
$_SESSION["session_test"] = "123456789";
?>
<a href="session_write.php">session_write.php</a>
/测试/session_write.php
<?php
session_start();
echo "session_test:".$_SESSION["session_test"]."<br>";
?>
好的场景:
- 在 Google Chrome 中,我将 URL 命名为“domain”/test/session_define.php
- 我点击链接,进入“domain”/test/session_write.php 页面,看到列出了 SESSION 变量“1234578”。一切正常。
错误场景(在 page.php 中我取消注释“删除会话”):
- 在 Google Chrome 中,我将 URL 命名为“domain”/test/session_define.php
- 我单击该链接,它转到“domain”/test/session_write.php,但 $_SESSION[“session_test”] 未定义(由于 page.php 它被删除)。
我正在调用子文件夹中的特定 php 文件(URL),但我认为无法满足条件:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ page.php?p1=$1 [L,QSA]
我不明白当我直接调用 PHP 文件“/test/session_define.php”时,page.php 怎么会删除 SESSION。不应该使用 .htaccess 进行重写。在 page.php 中,我也故意声明了:echo "Hello World"; 但这并没有显示出来,只是删除了会话。
请问我做错了什么?我哪里做错了?非常感谢您的帮助。
如果页面没有明确指定图标的位置,某些浏览器会尝试
/favicon.ico
默认请求。如果您没有这样的文件,这将触发您的最后一条规则,并被重写为
/page.php?p1=favicon.ico
。因此您的会话将被该请求破坏。