【问题标题】:Redirect URL with RewriteRule if php url has parameters?如果 php url 有参数,则使用 RewriteRule 重定向 URL?
【发布时间】:2011-01-09 04:25:04
【问题描述】:

我正在尝试在我的 .htaccess 中使用重写规则将用户从旧链接带到临时的新链接(它不是永久的新网站,所以我不想要 301 重定向)

以下适用于所有 html 页面以及不带参数的 php 页面,但它不处理最后一个示例 - 带参数的 php 页面。注意新域上的目录结构不同,但是url的参数是完全一样的。我可以用正则表达式做些什么来重写吗?我没有太多编写自己的 reg 表达式的经验,所以我不确定从哪里开始。谢谢!

我的 .htaccess 文件:

AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php
Options -MultiViews
Options +FollowSymlinks
RewriteEngine on
RewriteRule invest/index.html http://example.org/new_file_structure/invest/index.html
RewriteRule index-old.html http://example.org/index.php
RewriteRule invest/i2/ap/row_I2_i_ap1.php http://example.org/new_file_structure/i2/ap/row_I2_i_ap1.php

##The following doesn't work:
RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014 

谢谢, 仁

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    您需要使用RewriteCond 来检测查询字符串:

    RewriteCond %{QUERY_STRING} d=(.+)
    

    然后你需要使用%n形式的RewriteCond反向引用:

    RewriteRule subpages/view.php$ http://example.org/2010/view.php?d=%1
    

    【讨论】:

    • 非常感谢。你不知道我在尝试解决这个看似简单的重定向方面浪费了多少时间。
    【解决方案2】:

    任何 GET 参数都存储在

    %{QUERY_STRING}
    

    您应该能够将其添加到您的重定向 URL。

    RewriteRule subpages/view.php?d=i1_014 http://example.org/2010/view.php?d=i1_014&%{QUERY_STRING}
    

    但是,如果您不想要 301,为什么要指出完整的 URL?我认为这样你强制 301。为什么不直接使用/2010/view.php....

    【讨论】:

    • 嗯。您的意思是:RewriteRule subpages/view.php?%{QUERY_STRING} example.org/2010/view.php?%{QUERY_STRING} 我指向的是一个完整的 url,因为新页面位于不同的域中。
    • 啊,好吧。但如果你使用完整的http:// URL,我有 99% 的把握 Apache 会自动将其设为301,而不是内部重定向。但是,如果在同一台服务器上管理同一个域,我可能是错的 - 试试看,看看浏览器做了什么。
    • 我认为您实际上是对的,但是我想无论是外部重定向还是内部重定向都没有关系,我更专注于弄清楚如何捕获 GET 参数并使用它们来确定重定向到哪个网址。我尝试使用 %{QUERY_STRING} 但它不起作用 - 它应该在实际获取参数之后使用,还是代替?
    • 它应该像我写的那样工作,添加&,然后添加%{QUERY_STRING} 我在许多网站上都以这种方式成功地使用它(尽管前面没有http://但是这不应该有所作为)。发生什么了?传递哪些参数,哪些不传递?
    • 请注意:RewriteRule 的第一个参数是一个正则表达式,它根据 包含查询字符串的URL 路径进行检查。 httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2017-04-29
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多