关于重写引擎

关于重写引擎

我的 htaccess 文件包含这个

Options +FollowSymLinks

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

RewriteRule ^.*$ ./index.php

这会将所有请求重定向到我的 index.php 页面,其中包含所需的不同文件。该文件根据以下内容对 URL 进行拆分/并以数组形式提供输出。

$request = split("/", $request);

如果有人访问mywork/yash,查询将正常工作$request[0]yash但是当我为它编程时,$request[1]它会出错undefined offset

我知道当访问未定义的数组索引时会出现此错误,但是当mywork/yash/访问时,该错误不再发生!

有人能告诉我.htaccess在每次请求后添加尾部斜杠的规则吗,这样用户一输入mywork/yash它就会转换为mywork/yash/

提前致谢 !

答案1

尾部斜线

使用重写规则添加尾随斜杠是可能的,但没有目的,因为在这种情况下,您无法再重定向index.php

如果您确实需要该斜线,您仍然可以将其添加到您的 PHP 脚本中。

拆分请求

假设$request源自$_SERVER['REQUEST_URI],你可以在 每次出现 时将其拆分,/方法是编写

$parts = explode('/', $request);

因为mywork/yash这将是

array(2) {
  [0]=>
  string(6) "mywork"
  [1]=>
  string(4) "yash"
}

并且因为mywork/yash/这将是

array(3) {
  [0]=>
  string(6) "mywork"
  [1]=>
  string(4) "yash"
  [2]=>
  string(0) ""
}

但是使用 时$_SERVER['REQUEST_URI],您始终会有一个前导斜杠,这将导致 的第一个元素为parts空字符串。不过,您应该能够轻松地将空字符串排序出来。

答案2

终于找到解决办法了!

制作了一个可以轻松解决问题的功能!

function redirect_to_unslashed($i)

{

if(isset($_SESSION['request'][$i]))

{

if($_SESSION['request'][$i] == '') { navigate($_SESSION['request'][$i-1]);
}
}

}

如果最后一个斜杠包含空字符串,则此函数实际上会重定向。

相关内容