我可以像这样重写我的网址,这是个好主意吗?

时间:2009-07-03 15:51:58

标签: php apache mod-rewrite

是否可以从此重写(Apache Mod-Rewrite)URL:

http://www.example.com/view.php?t=h5k6 http://www.example.com/h5k6

重写的原因是URL需要非常短(有点像一个小的URL服务)。

新的网址是否仍会点击我的view.php页面?它是否仍然能够使用超全局数组GET($_GET)来访问变量t?我仍然希望我的index.php页面映射到此http://www.example.com

我也很感谢对这可能产生的影响的评论,因为我有点像菜鸟。 :)

全部谢谢

3 个答案:

答案 0 :(得分:12)

mod-rewrite的术语以另一种方式起作用。请求将像http://www.example.com/h5k6一样进入,并在内部重写为http://www.example.com/view.php?t=h5k6。这样,您的PHP脚本可以响应请求,就好像它们是作为GET参数发送的那样,但是用户以更加友好的方式查看URL。

因此您不必更改任何PHP脚本,您仍然可以从GET数组访问参数t

在您的情况下,规则将如下所示:

RewriteRule ^/(.*) /view.php?t=$1

您可能希望更具体地了解您所接受的内容(而不仅仅是全部.*表达式)。此外,如果此目录中的其他页面不是view.php。

,则可能需要此规则的例外

答案 1 :(得分:2)

尝试以下方法之一:

# /view.php?t=h5k6 externally to /h5k6
RewriteCond %{THE_REQUEST} ^GET\ /view\.php
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$
RewriteRule ^/view\.php$ /%2 [L,R=301]

# /h5k6 internally to /view.php?t=h5k6
RewriteRule ^/([0-9a-z]+)$ view.php?t=$1 [L]

答案 2 :(得分:1)

是的,这绝对是可能的,并且具有您描述的效果。但是,您的术语是倒退的。 “短”URL是浏览器原始发送给服务器的URL,它被重写为更长版本,然后实际处理并导致PHP请求。

几乎唯一的问题是,如果不小心使用,这可能会导致搜索引擎索引两个网址并将其视为重复内容,这对您的排名不利。一方面,这可以(并且应该)通过从不在任何地方发布“长”版本来避免(即所有站点内部链接都具有“短”格式)。但是,由于您可能会意外地发布它们(这很容易发生),您还应该使用link rel="canonical"告诉搜索引擎您希望网页编入索引的网址。