我是网址重写的新手。
我在主页上有一个锚文本,点击后会打开另一页。单击链接时在浏览器中显示的目标URL是 http://example.com/index.php?p=one/two/three/pdp&abc=436
我希望在URL中显示 http://example.com/index.php?p=shopping/shop/ipad/pdp&abc=436
基本上我正在看的是URL中的替换 一/二/ 3
要 购物/店铺/ ipad的
我想要网址http://example.com/index.php?p=one/two/three/pdp&abc=436 看起来像http://example.com/index.php?p=shopping/shop/ipad/pdp&abc=436。
请注意,我有14,000页,因此无法进行身体检查。到处改变。 我希望这发生在使用url重写。所以在root中我已经添加了.htaccess以下几行。
RewriteEngine On
RewriteRule ^shopping/shop/ipad/?$ one/two/three/pdp [NC,L]
但这会导致内部服务器错误。
我怎样才能显示更好的网址? 感谢
答案 0 :(得分:1)
你可以试试这个:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} p=one/two/three/(.*)
RewriteRule .* http://example.com/index.php?p=shopping/shop/ipad/%1? [R=301,L]
它将重定向:
http://example.com/index.php?p=one/two/three/pdp&abc=436
要:
http://example.com/index.php?p=shopping/shop/ipad/pdp&abc=436
我假设`p=one/two/three/
和p=shopping/shop/ipad/
是常量。如果它们是变量,您应该更新问题并描述它们的关系和模式,以便能够捕获并替换它们。
第二个选项:
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} p=one/two/three/([^/]+)&([^/]+)=([^/]+).*
RewriteRule .* http://example.com/index.php?p=shopping/shop/ipad/%1/%2/%3? [R=301,L]
它将重定向:
http://example.com/index.php?p=one/two/three/anything1&anything2=anything3
要:
http://example.com/index.php?p=shopping/shop/ipad/anything1/anything2/anything3
答案 1 :(得分:0)
试试这个:
Redirect 301 old_url new_url
示例:
Redirect 301 index.php?p=one/two/three/pdp&abc=436 http://example.com/index.php?p=shopping/shop/ipad/pdp&abc=436
我希望你解决问题,对不起,如果你没有,我还没试过。
问候。
答案 2 :(得分:0)
RewriteRule
仅适用于网址的路径部分(/index.php
部分),而不是查询字符串(之后的所有内容) ?
)。您需要RewriteCond
来捕获查询字符串,然后是RewriteRule
,它会单独留下路径部分,但会更改查询字符串。
尝试以下(我暂时无法验证,抱歉):
RewriteCond %{QUERY_STRING} p=one/two/three/pdp/&(.*)
RewriteRule * /index.php?p=shopping/shop/ipad/&%1 [NC,R=301,L]
第一条规则基本上是“ if 查询字符串匹配此模式(记住额外的东西)”,第二条规则说“ then 将任何更改为/index.php?p=shopping…
并添加您从Cond记住的内容“。 %1
是后向引用到最后一个 Cond 匹配的捕获缓冲区,而不是$1
,后者用于后向引用规则模式。
第二条规则可以匹配所有内容,因为它只会在第一条规则匹配时触发。 R=301
表示使用代码301执行实际重定向(例如),否则访问者将永远不会看到更改。
关于这种方法的两件事:
您网页中的链接不会更改,在鼠标悬停时类似的内容仍会显示为…one/two/three…
。只有在有人实际访问时才会应用此更改。
这个实际例子非常脆弱;它取决于首先出现的查询字符串的p=
部分,以及实际跟随它的内容。如果您有更多案例,则需要更改正则表达式。
有关详细信息,请参阅http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html
答案 3 :(得分:0)
又一种方法:
如果您有足够的权限来更改index.php
脚本,则可以重写那里,而不是在Web服务器中。这样做的好处是,您可以使用强大的语言,它已经很好地处理了查询字符串。