【问题标题】:mod_rewrite is not working for memod_rewrite 不适合我
【发布时间】:2012-05-04 23:11:40
【问题描述】:

我正在尝试使用 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时...... 提前致谢 劳伦斯

【问题讨论】:

  • 你要声明你的 RewriteBase 吗?如果您使用的是 VPS,则通常需要此功能才能正常工作。
  • 我不在 VPS 上,但我不知道 RewriteBase... 我应该设置什么?
  • 您的服务器是否配置为允许覆盖?
  • 很遗憾没有……我已经添加了 RewriteBase /
  • Lawrence 我不擅长 mod_rewrite 来回答这个话题,但是当卡在一些代码上时,我喜欢(就像你尝试的一样)从简单的“plain-vanilla”开始可能的,当我开始工作时,然后从那里开始工作......添加我实际需要的细节,一一发现问题所在。您确实尝试了简单的RewriteRule ^ancienne-url\.html$ /nouvelle-url.html [R=301,L],所以现在也许可以尝试介于它和您想去的地方之间的东西,这个?:RewriteRule ^news/Actualites/(test)$ news/Actualites_d.tpl?SKU=$1 [L]。如果失败,请进一步分解。

标签: database apache mod-rewrite apache2


【解决方案1】:

试试:

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

【讨论】:

    【解决方案2】:

    因此,您的重写规则存在一些问题,作为一般做法,通常最好添加完整的 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-12-08
      • 2023-03-12
      • 2012-09-30
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      相关资源
      最近更新 更多