1

我正在尝试为使用 apache 的网站设置 mod_rewrite

这是我的句子:

RewriteEngine on
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [L]

但它不工作

我还有其他重写工作,我测试了一些简单的东西,例如:

RewriteEngine on
RewriteRule ^ancienne-url\.html$ /nouvelle-url.html [R=301,L]

这是有效的。

我试图把它放在 Htaccess 和 Vhost 中,都不起作用。

我也想得到以下

news/Actualites/MYPRODUCT当我有这样的网址时news/Actualites_d.tpl?SKU=MYNUMERIC_ID

我不知道是否有可能在一侧有“单词”,当它是正常的一侧的数字 ID 时......提前感谢劳伦斯

4

2 回答 2

0

尝试:

RewriteEngine on
RewriteBase /
RewriteRule ^news/Actualites/([^/]+)/?$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

对于问题的第一部分。

对于第二部分,您可以使用 RewriteRule 来实现它,但这意味着对所有 URL 进行硬编码,这不是一个好主意。

RewriteRule ^news/Actualites/MYPRODUCT$ news/Actualites_d.tpl?SKU=MYNUMERIC_ID [NC,QSA,L]

然后您需要复制上面的行,为每个不同的 URL 替换 MYPRODUCT 和 MYPRODUCT_ID。

在这种情况下,您通常会执行以下规则:

RewriteRule ^news/Actualites/([^/]+)$ news/Actualites_d.tpl?SKU=$1 [NC,QSA,L]

而actualites_d.tpl 脚本将查询数据库或其他任何东西以获取传入的URL值所需的信息:

SELECT * FROM tbdProduct WHERE fldProductURLSlug = SKU
于 2012-04-24T18:16:57.343 回答
0

因此,您的重写规则存在一些问题,作为一般做法,通常最好添加完整的 URL 以防止循环本地重写。第二个问题是您的重写规则期望 URL 以新闻开头......但实际上它是 /news 所以为了修复兼容性,它应该或多或少类似于:

RewriteRule ^/?news/Actualites/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1 [R=301,L]

所以在这个例子中你会看到我添加了 / 和 ? 在重写规则的开头,这是为了在未设置 / 的情况下保持兼容性。其次,您会看到 (.*) 圆括号表示变量赋值,您可以设置多个变量,然后将它们与 $1 $2 一起使用,依此类推。最后,我将重定向位置设置为 301 重定向。除非您在别名目录下提供服务,否则使用 RewriteBase 是无关紧要的,例如 /blog/

前面的示例将 RewriteBase 设置为 /,然后为 ^news 执行重写规则。但这并没有考虑到您可能收到的一些不包括起始斜线的请求。

为了完整起见,另一个例子是:

RewriteRule ^/?news/Actualites/(.*)/(.*)/(.*)/.*$ http://{$HTTP_HOST}/news/Actualites_d.tpl?SKU=$1&orderid=$2&somvar=$3 [R=301,L]
于 2013-02-27T02:31:32.897 回答