Php URL重写导致内部服务器错误
我是一个新的URL重新编写 我有一个锚文本在主页上,当点击将打开另一个页面。单击链接时,浏览器中显示的目标url为 相反,我想显示在URL中 所以本质上我看到的是URL中的替换 一/二/三 到 购物/商店/ipad 我想要网址 看起来像 请注意,我有14000页,所以不能到处去换。 我希望通过url重写实现这一点。因此,在根目录中,我添加了.htaccess以下几行Php URL重写导致内部服务器错误,php,apache,.htaccess,url,Php,Apache,.htaccess,Url,我是一个新的URL重新编写 我有一个锚文本在主页上,当点击将打开另一个页面。单击链接时,浏览器中显示的目标url为 相反,我想显示在URL中 所以本质上我看到的是URL中的替换 一/二/三 到 购物/商店/ipad 我想要网址 看起来像 请注意,我有14000页,所以不能到处去换。 我希望通过url重写实现这一点。因此,在根目录中,我添加了.htaccess以下几行 RewriteEngine On RewriteRule ^shopping/shop/ipad/?$ one/two/
RewriteEngine On
RewriteRule ^shopping/shop/ipad/?$ one/two/three/pdp [NC,L]
但这会导致内部服务器错误
如何实现显示更好的url?
谢谢试试这个:
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
我希望你能解决你的问题,对不起,如果你没有,我还没有试过
问候。
重写规则
只在URL的路径部分(/index.php
部分)有效,而不是查询字符串(在?
之后的所有内容)。您需要一个RewriteCond
来捕获查询字符串,然后是一个RewriteRule
,它只保留路径部分,但会更改查询字符串
请尝试以下操作(抱歉,我目前无法验证):
第一条规则基本上是“如果查询字符串与此模式匹配(记住额外的内容)”,第二条规则是“然后将任何内容更改为/index.php?p=shopping…
,并添加从Cond中记住的内容”。%1
是对上一次第二次匹配的捕获缓冲区的反向引用,而$1
是对规则模式的反向引用
第二条规则可以匹配所有规则,因为只有第一条规则匹配时才会触发。R=301
表示使用代码301执行实际重定向(例如),否则访问者将永远看不到更改
这种方法有两点:
…一/二/三…
。只有当有人实际访问时,才会应用更改p=
部分在前面,以及后面的内容。如果有更多事例,则需要更改正则表达式index.php
脚本,您可以在那里进行重写,而不是在web服务器中。这样做的好处是,您可以使用一种功能强大的语言,它已经能够很好地处理查询字符串。您可以尝试以下方法:
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
重写规则
不能直接用于查询Sting。您需要查看RewriteCond
。查看apache错误日志。确保mod_rewrite已启用。(a2enmod rewrite
)谢谢Felipe。这个成功了。我在看一个微小的变化。假设我想要而不是我该怎么做?非常感谢#几分钟后我会更新我的答案。@Anita更新了我的答案。
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]