规则的工作原理是:
RewriteRule <pattern_A> <target_B>
它总是从<pattern_A>
作品<target_B>
,从来没有倒过来,也没有在2个请求该规则的“链接”。 top part of this answer解决了当“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,并重定向浏览器通过使用R=301
标志转换为不带查询字符串的新URL。
你真的需要改变所有内容,让他们使用,而不是依靠重定向浏览器的一个非常繁琐和效率低下的方式,然后在内部重写回原来的URL清洁寻找网址。
我发现这一个,我使用相同的代码,但他们没有在地址栏中保留缩短的网址。这就是为什么我问 – Dotan