我调用子文件夹中的PHP文件,但.htaccess使用了奇怪的重写

问题描述 投票:0回答:1

在根目录中我有文件:.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/

page.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>";
?>

好的场景:

  1. 在 Google Chrome 中,我将 URL 称为“domain”/test/session_define.php
  2. 我单击链接,进入“domain”/test/session_write.php 页面,并看到列出的 SESSION 变量“1234578”。 一切都好。

错误场景(在page.php中我取消注释“删除会话”):

  1. 在 Google Chrome 中,我将 URL 称为“domain”/test/session_define.php
  2. 我单击链接,它会转到“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";但这没有显示,只有会话被删除。

请问我做错了什么?我错了什么? 非常感谢您的帮助。

.htaccess mod-rewrite
1个回答
0
投票

如果页面未明确指定网站图标的位置,某些浏览器会默认尝试请求

/favicon.ico

如果你没有这样的文件,这将触发你的最后一条规则,并被重写为

/page.php?p1=favicon.ico
。所以你的会话会被该请求破坏。

© www.soinside.com 2019 - 2024. All rights reserved.