【问题标题】:Redirect/.htaccess to change old PHP parameter URLs to SEO friendly CakePHP URLs?Redirect/.htaccess 将旧的 PHP 参数 URL 更改为 SEO 友好的 CakePHP URL?
【发布时间】:2011-04-29 18:43:52
【问题描述】:

我即将更新我的网站以使用 CakePHP,而不是旧的本土框架。我需要编写 HTAccess 文件以将旧的 PHP 参数 URL 重定向到新的 CakePHP SEO 友好 url,但我无法让它工作。

我的 htacess 文件(app/webroot 中的那个)现在看起来像这样:

RewriteEngine On

RewriteRule ^index.php?action=view&item=172$ index.php?url=item/172 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

它不起作用。我尝试删除 L 并将其重定向到 item/172,但这也不起作用。当前一个以未设置的 URL 参数结束,如果我查看 $_SERVER['REQUEST_URI'] 它没有改变。虽然我不知道 mod_rewrite 是否会改变这一点。我的重写规则似乎没有被激活,即使它是直接从我的浏览器的 URL 栏中复制的。我试过了,没有前导/。没有骰子。

这是怎么回事?

如何编写更通用的 URL 来进行转换?我试过类似的东西:

RewriteRule ^index.php?action=view&item=([0-9]+)$ index.php?url=items/$1 [R=301,L]    

但这也没有用。我做错了什么?

编辑这真是令人愤怒。

RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]

这行得通。它将所有 url 汇集到正确形成的 Cake url 中。然后哪个蛋糕的处理器拿起并以某种方式处理。我不确定它是如何错过 Cake 的第二条重写规则的,但确实如此。试试这个:

RewriteRule ^(.*)$ item/172 [R=301]

返回一个格式错误的重定向,就像在前一个上指定 last 一样:

RewriteRule ^(.*)$ /index.php?url=item/172 [R=301,L]

这表明它永远无法完成。

所以我其实很困惑为什么会这样:

RewriteRule ^(.*)$ /index.php?url=item/172 [R=301]

返回正确的 Cake url,但它确实会被发送到正确的页面。然而, 一旦我尝试更改第一部分,它就会开始失败。

等一下。当它到达? 时,它开始失败。它成功匹配 index.php 但不匹配 index.php? 但转义它没有任何区别。

RewriteRule ^index.php\?$ /index.php?url=item/172 [R=301]

无法匹配或返回正确的 URL。而且它似乎也不符合 Cake 的正常捕获,因为 $_GET['url'] 是空的。如何在 mod_rewrite 中转义参数字符以匹配字面意思?

【问题讨论】:

  • 嘎! mod-rewrite 的 *&@$& 有什么问题?我让它工作了大约 30 秒,添加了另一个重写规则,它再次停止工作!我删除了另一个重写规则,但它仍然无法正常工作!到底是什么?!

标签: php cakephp mod-rewrite seo


【解决方案1】:

RewriteRule 只能测试 URI 路径,但不能测试查询:

模式最初将与主机名和端口之后、查询字符串之前的 URL 部分进行匹配。如果您希望匹配主机名、端口或查询字符串,请分别使用 RewriteCond%{HTTP_HOST}%{SERVER_PORT}%{QUERY_STRING} 变量。

所以:

RewriteCond %{QUERY_STRING} ^action=view&item=([0-9]+)$
RewriteRule ^index\.php$ /index.php?url=item/%1 [R=301,L]

【讨论】:

  • 谢谢!做到了。不知何故,在我所有的阅读和搜索中,这从未被提及或出现过。我从来没有想过查询字符串会与主 URL 分开。
猜你喜欢
  • 2011-05-09
  • 2012-08-21
  • 2011-05-29
  • 2013-01-22
  • 2021-10-15
  • 2013-02-03
  • 2015-01-13
  • 2022-11-29
  • 1970-01-01
相关资源
最近更新 更多