访问htaccess重写的URL没有查询参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问htaccess重写的URL没有查询参数相关的知识,希望对你有一定的参考价值。

我已经将php文件的URL重写为:

RewriteRule ^psu/(.*)/(.*)/(.*)/(.*) _psu.php?id=$1&mb=$2&cpu=$3&name=$4 [L]

这使得页面_psu.php仅可访问:

psu/path/path/path/path

任何其他网址,如:

psu/path/path/path/
psu/path/path/
psu/path/
psu

给出404 Not Found错误。如何重写URL - psu/path/path/path/path保持上述URL可访问?

答案

试试这个:

RewriteEngine On
RewriteBase /
RewriteRule ^psu(?:/([^/]*)(?:/([^/]*)(?:/([^/]*)(?:/([^/]*)/?)?)?)?)?$ _psu.php?id=$1&mb=$2&cpu=$3&name=$4 [L]

_psu.php

<?
$id = $_GET["id"];
$mb = $_GET["mb"];
$cpu = $_GET["cpu"];
$name = $_GET["name"];

echo "id: $id<br>
mb: $mb<br>
cpu: $cpu<br>
name: $name";
?>

检查可访问的URL:

/psu/1/2/3/4
/psu/1/2/3
/psu/1/2
/psu/1
/psu

满足所有提到的退休。

另一答案

要在psu之后处理动态长度路径,请在站点根目录.htaccess中使用此规则:

AcceptPathInfo on
RewriteEngine On

RewriteRule ^psu(/.*)?$ _psu.php$1 [L,NC]

php内部的_psu.php代码中使用:

$_SERVER["PATH_INFO"]

获取路径信息。您可以通过/将其拆分以获取路径组件列表。

另一答案

您可以使用:

RewriteRule ^psu(?:/([^/]*)(?:/([^/]*)(?:/([^/]*)(?:/([^/]*)/?)?)?)?)?$ _psu.php?id=$1&mb=$2&cpu=$3&name=$4 [L]

以上是关于访问htaccess重写的URL没有查询参数的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess使用URL中的#item重写站点以进行直接文件访问

.htaccess:使用参数重写 url 不起作用

htaccess 单参数重写规则

htaccess 重写 URL 以仅删除一个 php 文件的 $_GET 查询[重复]

删除 index.php url 重写 .htaccess

。htaccess重写条件/规则并隐藏url参数