0

我已经看到很多网站都在这样做,但还没有找到解释这一点的指南。我有这个 .htaccess 代码

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

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

我怎样才能做到这一点?

4

3 回答 3

1

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

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

于 2012-11-08T16:52:16.090 回答
0

规则的工作方式如下:

RewriteRule <pattern_A> <target_B>

总是<pattern_A>to 开始 工作<target_B>,从不反过来,这个规则没有“链接”两个请求。此答案的顶部解决了“为另一个 URL 更改 URL”时发生的两种不同的事情。

您拥有的规则采用不带查询字符串的 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

您确实需要更改所有内容,以便它们使用看起来更清晰的 URL,而不是依赖一种非常繁琐且效率低下的方式来重定向浏览器,然后在内部重写原始 URL。

于 2012-11-09T04:11:35.610 回答
0

有很多关于如何做到这一点的资料。这是我google时得到的第一个。

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

于 2012-11-08T16:50:57.747 回答