2013-06-01 43 views
2
  • 用户点击链接(从他们的电子邮件):http://www.site.com/edit/wih293f73y
  • 浏览器窗口打开并获取到正确的页面。
  • 但现在浏览器的地址栏显示:http://www.site.com/editor.php?editCode=wih293f73y

额外的信息:的.htaccess URL重写工作,但地址栏,然后显示“脏”的网址

  • 我重写规则是:RewriteRule ^edit/([A-Za-z0-9-]+)/?$ editor.php?editCode=$1 [NC,L]
  • 当用户点击了一个链接,只会出现此问题。只需在地址栏中输入漂亮的网址,它就可以完美工作。
  • 此问题仅适用于链接,其中包含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> 

如果它是重要的,这种情况我的其他重写规则后。

+0

顶你一定没有'[R]'标志在那里进行重定向? –

+0

是的,这是整条线。虽然我使用HTML5样板文件.htaccess文件,那么它会设置任何默认值?字符串“[R]”不会在其中出现(这是一个相当长的文件)。 [另外,我在问题中添加了一些额外的信息] – JoeRocc

+0

问题是为htaccess代码检查引用搜索htaccess代码中的'HTTP_REFERER' –

回答

1

我只是看了一下,很明显你的www规则是造成这种情况。问题是你想修复它吗?如果你这样做,那么移动这条规则的所有其他规则之上,你的问题应该得到解决。

移动这对所有其他规则

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

太棒了!谢谢你一堆 – JoeRocc

+0

不客气,很高兴它解决了。 – anubhava

0

您可以使用使用重定向指令

重定向301 ^编辑/(A-ZA-Z0-9 - ] +)?/ $ editor.php editCode = $ 1

这个策略有一些优点和缺点。优点是;

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

缺点是;

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

嗨克里斯,这是一个好策略吗?我对.htaccess很新,所以我只想确保我没有采取任何捷径,以后再咬我。这不仅仅是一个简单的任务 - 应该有一个简单的重写应该没有什么困难吗?或者是您需要更多信息才能知道它为什么不起作用的问题? – JoeRocc

+0

单击链接并输入URL之间的行为应该相同。如果您认为有所不同,您可能需要查看电子邮件正在做什么。 –

+0

是的,这很奇怪 - 但它发生在任何链接上,而不仅仅是来自电子邮件。我也用网站的链接测试了它。如果你有一段时间,我已经在这个问题上做了一些编辑,这些编辑可能是很大的线索 – JoeRocc