是否可以从此重写(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。
我也很感谢对这可能产生的影响的评论,因为我有点像菜鸟。 :)
全部谢谢
答案 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"告诉搜索引擎您希望网页编入索引的网址。