【问题标题】:Mod_rewrite helpmod_rewrite 帮助
【发布时间】:2010-10-21 23:10:02
【问题描述】:

我正在尝试从我的日历中删除查询字符串,但我的 mod_rewrite 没有附加查询字符串。

网站是http://cacrochester.com/Calendar 如果点击链接跳转到不同月份,查询字符串通常为http://cacrochester.com/Calendar?currentmonth=2010-11

根据我的以下规则,它只是不附加查询字符串,因此当您单击下个月的链接时,它只会停留在 10 月。我的规则有什么问题?

这是我的规则

RewriteCond %{QUERY_STRING} !^$
RewriteRule ^.*$ http://cacrochester.com/Calendar? [NC,R=301,L]

编辑:

我想要的是将http://cacrochester.com/Calendar?currentmonth=2010-11 之类的网址转换为http://cacrochester.com/Calendar/2010-11 之类的网址

【问题讨论】:

  • 您在第一句话中说要删除查询字符串,但您的问题是如何保留它们。是哪个?
  • 为澄清起见,您尝试使用GET 而不在地址栏中显示查询字符串?
  • 对不起。我希望查询字符串类似于cacrochester.com/Calenar/2010-11
  • 那不是查询字符串。查询字符串是出现在 URL 中问号之后的一组名称-值对。你的问题还不清楚。
  • 我已经更新了我的问题。请参阅我的编辑以进行澄清。

标签: mod-rewrite query-string


【解决方案1】:

您可能需要您的应用输出诸如“/Calendar/2010-11”之类的相对网址。这是一个简单的代码更改。

然后在 Apache 中,您需要重写这些 url,使用:

RewriteRule ^/Calendar/([0-9]+-[0-9]{2})$ /Calendar.php?currentmonth=$1 [NC,QSA,L]

(您不希望此规则使用 RewriteCond。)

使用 R=301 强制重定向只会暴露内部 url 方案。我不认为那是你想要的。

【讨论】:

  • That's a simple code change 是什么意思?想要更改我的 PHP 代码?
  • 是的,因此是“你的应用程序”。网络服务器并不意味着对您的 php 脚本的输出进行 url 重写。那将是巨大的性能损失。如果您希望最终用户看到像 /Calendar/2010-11 这样的 url,那么由您的 php(或其他动态语言)应用程序来输出这些 url。通常这是通过设置一个或多个配置变量(在您的应用程序中)来控制这些 SEO 友好 url 的构建方式。
【解决方案2】:

要在重写时维护查询字符串,请使用 QSA(查询字符串附加)标志。

[NC,R=301,QSA,L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多