.htaccess URL 重写有效,但地址栏随后显示"脏"URL


  • 用户点击链接(来自他们的电子邮件(:http://www.site.com/edit/wih293f73y
  • 浏览器窗口打开,并将它们带到正确的页面
  • 但现在浏览器的地址栏显示:http://www.site.com/editor.php?editCode=wih293f73y

额外信息:

  • 我的重写规则是:RewriteRule ^edit/([A-Za-z0-9-]+)/?$ editor.php?editCode=$1 [NC,L]
  • 只有当用户单击链接时才会出现此问题。当你只需在地址栏中键入漂亮的url时,它就可以完美地工作
  • 此问题仅适用于包含www.的链接-链接http://site.com/edit/wih293f73y的工作方式类似于符咒
  • 我的.htaccess文件包括以下代码(来自HTML5样板,我以前不知道(:
# Rewrite www.example.com → example.com
<IfModule mod_rewrite.c>
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>

如果这很重要的话,这发生在我的其他重写规则之后。

我只是看了一眼,很明显是您的www规则导致了这种情况。问题是你想把它修好吗?如果你这样做了,那么把这个规则放在所有其他规则之上,你的问题就应该得到解决。

将其移动到所有其他规则的顶部

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

您可以使用重定向指令

重定向301^edit/([A-Za-z0-9-]+(/?$editor.php?editCode=$1

这种策略有一些优点也有缺点。优点是;

  • 它超级快。你甚至不需要加载你的应用程序就可以工作
  • 这是最小的代码
  • 重定向是Apache(或任何http服务器(的固有部分,不会很快出现

缺点是;

  • 这不是你的应用程序的一部分。如果您决定更改逻辑或URL,您也必须更改它
  • 它比较慢,因为您需要调用php,而不是让Apache发出重定向

最新更新