这不是真正的问题,而是一个问题。
我有这个文件,当您转到const array = [
[ '2','Yes'],
[ '2','Yes'],
[ '2','Yes'],
[ '3','Yes'],
[ '3','Yes'],
[ '4','Yes'],
];
const result = Object.entries(array.reduce((a, [id]) => {
a[id] = (a[id] || 0) + 1;
return a;
}, {})).map(([ID, Count]) => ({ID, Count}))
.sort((a, b) => a.Count - b.Count);
console.log(result);
时显示产品信息,如何使它在转到URL/product.php?id=1
时显示相同的信息。 URL/product/1
是一个可变的变量。
对不起,我不知道htaccess的工作原理以及重写方式。
答案 0 :(得分:1)
您需要将请求从/product/1
内部重写到/product.php?id=1
。在Apache上,您需要使用mod_rewrite进行此操作。在.htaccess
中,格式为:
# We must enable the rewrite engine before using mod_rewrite
RewriteEngine On
# Internally rewrite a request from "/product/1"
RewriteRule ^product/1$ /product.php?id=1 [L]
请注意,这实际上是从/product/1
重写为/product.php?id=1
(如问题中所述)。并且是服务器的内部-浏览器地址栏中的URL不变。
Apache指令的参数以空格分隔:
^product/1$
-RewriteRule
指令的第一个参数( pattern )是regular expression (regex),它与URL路径匹配(仅)的请求。请注意,在.htaccess
中,此URL路径不是以斜杠开头,因此,即使您请求的是product/1
,匹配的URL路径也是/product/1
而不是example.com/product/1
。
/product.php?id=1
-第二个参数( substitution )是用于替换所请求URL的字符串。即。目标网址。这是一个“普通”字符串,而不是正则表达式。
[L]
-第三个参数( flags )是可以更改RewriteRule
指令行为的其他选项。参数必须用方括号括起来,并包含用逗号分隔的标志列表。 L
(或last
)标志表示这是此轮处理中的 last 指令。如果这是文件中的最后一条指令,则不需要L
标志。如果省略L
标志,则处理将继续,并且可以进一步重写请求(如果您有更多指令)。另一个常见标志是R
(或redirect
)标志。这会将内部重写更改为外部重定向(它将Location
HTTP响应标头发送回客户端,并导致浏览器从外部重定向到新URL-浏览器地址栏中的URL更改。)
附加说明:在这种情况下,由于您正在请求“产品”,并且存在具有 basename 的文件(实际上,这是您要重写的文件) ),还需要确保禁用MultiViews
(默认情况下)。如果启用了MultiViews(某些共享主机出于某种原因启用了此功能),则mod_negotiation将触发product.php
的内部子请求。 之前,您的mod_rewrite指令将重写该请求,并且它将丢失{ {1}} URL参数。 (SO上的许多重写问题是由与MultiViews的冲突引起的。)要禁用id
,可以在MultiViews
文件的顶部添加此内容:
.htaccess
要使其更通用,并将Options -MultiViews
重写为/product/<number>
是1个或多个数字的/product.php?id=<number>
,可以修改正则表达式(第一个参数)并创建 backreference (您在 substitution 字符串(第二个参数)中使用)。例如:
<number>
这会将格式# Internally rewrite a request from "/product/<number>"
RewriteRule ^product/(\d+)$ /product.php?id=$1 [L]
的URL重写为/product/123
。其中/product.php?id=123
是1个或多个数字,由正则表达式子模式123
表示。 (\d+
是速记字符类,与稍稍冗长的\d
相同。[0-9]
是量词,它指示1个或多个前面的模式-在这种情况下为数字。)通过将其括在括号中,我们创建一个捕获组,我们可以在 substitution 中引用该组。这就是+
后向引用。 $1
本质上是一个变量,其中包含捕获的正则表达式的任何 value 。
$1
参考: