【问题标题】:Mod rewrite - Dynamic $_GET rewriteMod 重写 - 动态 $_GET 重写
【发布时间】:2011-03-29 14:21:25
【问题描述】:

有没有使用 ModRewrite 来实现以下目标:

初始网址:http://example.com/page?value=test

重定向网址:http://example.com/page/value/test

初始网址:http://example.com/page?value=test&fruit=apple

重定向网址:http://example.com/page/value/test?fruit=apple

我需要这个规则是动态的,因为我不知道它要用于的所有页面,而且我还需要在 PHP 中保留 $_GET 变量。

谢谢

【问题讨论】:

  • 所以你收到的 URL 是 example.com/page?value=test 并且需要为 PHP 将它重写为 example.com/page/value/test?这与通常的做法相反。
  • 我只想这样做以帮助 SEO,但我需要确保 $_GET 变量仍然包含原始查询字符串中的所有值
  • 还是不清楚。您的 PHP 脚本希望收到这两个 URL 中的哪一个? (尽管有额外的 $_GET 变量)
  • 这不是我的专长,所以我可能错了,但我认为这种方法不会对 SEO 产生任何积极影响。正如@Michael 所提到的,您所要求的实际上与 mod_rewrite 规则的正常使用完全相反(并且经常被引用为出于 SEO 目的)。
  • 感谢大家的帮助。不幸的是,事情发生了变化,我们不再需要这样做了!!!很抱歉浪费了您的时间。

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

如果有问题的 URL 存储在数据库中,并且需要重写,直到内容可以更新以反映新的 URL 模式,这个问题才有意义。为了澄清问题,这将被视为重定向而不是重写,因此可以改善 SEO。然后,正如上面的 cmets 所指出的,URL 可以被重写 来为 PHP 提供正确的 URL 参数。如果这是 James 的意图,下面的配置会有所帮助:

### 301 redirect old query string URLs to pretty URLs
### This will help search engines index the new URLs, 
### not ones that are linked in content
### This is rather messy due to the 
### http://example.com/page/value/test?fruit=apple example
RewriteCond %{QUERY_STRING} value=([^&]*)
RewriteRule (.*) /page/value/%1 [R=301,E=rewrite:true]

RewriteCond %{ENV:rewrite} true
RewriteCond %{QUERY_STRING} !&
RewriteRule (.*) $1? [R=301,L]

RewriteCond %{ENV:rewrite} true
RewriteCond %{QUERY_STRING} &([^=]*)=(.*)$
RewriteRule (.*) $1?%1=%2 [R=301,L]

### Rewrite pretty urls with usable parameters
### [QSA] will maintain extra params such as &fruit=apple
RewriteRule /page/value/(.*) /page.php?value=$1 [QSA]

这很麻烦,但我遇到过类似的情况,需要重定向存储在数据库中的旧 URL,直到内容可以更新。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多