重定向网址并在地址栏上显示短网址

时间:2012-11-08 16:47:22

标签: .htaccess

我看过很多网站都这样做,但没有找到解释这个问题的指南。 我有这个.htaccess代码

Options +FollowSymLinks  
RewriteEngine On  
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1  

它将site.com/user/1重定向到site.com/profile.php?id=1 但是当它重定向时,我希望用户在他的地址栏中看到缩短的网址(site.com/user/1)

我该怎么做?

3 个答案:

答案 0 :(得分:1)

重写是服务器的内部逻辑,即您在地址栏中看到的长URL请求的浏览器,HTTP服务器将其路由到较短的URL。如果您希望浏览器显示较短的网址,则需要使用Redirect代替Rewrite

请注意,使用重定向时,页面的加载速度会变慢,因为服务器会将重定向响应返回给浏览器,然后浏览器再次请求页面。

答案 1 :(得分:0)

有很多关于如何做到这一点的消息来源。这是我用Google搜索时得到的第一个。

http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/

答案 2 :(得分:0)

规则的作用类似于:

RewriteRule <pattern_A> <target_B>

始终<pattern_A><target_B>,从不相反,此规则没有“链接”2个请求。 top part of this answer解决了“网址因其他网址而被更改”时发生的两种不同情况。

您所拥有的规则采用不带查询字符串的URL,并在内部将其重写为带有查询字符串的php文件。浏览器没有看到这种情况,它是“幕后”。当你说你希望地址栏显示没有查询字符串的URL时,你首先会找到一些其他的URL,而“其他”URL需要从外部重定向浏览器。所以根据你已有的规则:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profile\.php\?id=([^&\ ]+)
RewriteRule ^ /users/%1? [L,R=301]

匹配请求字符串,而不是请求URI(沿URL处理管道和重写引擎更改),提取ID,将浏览器重定向到新URL而不是使用R=301标志查询字符串。

您确实需要更改所有内容,以便他们使用更清晰的网址,而不是依赖于重定向浏览器的非常麻烦和低效的方式,然后在内部重写返回< / em>到原始网址。