【问题标题】:.htaccess Query String Rewrite.htaccess 查询字符串重写
【发布时间】:2015-07-13 09:56:00
【问题描述】:

已经转了几个小时,真的很感谢你的帮助。

我正在尝试重写包含查询字符串(以 company.php 开头)的 URL。

我找到了一些让重写本身工作的方法,但它总是显示 404 :(

例如我需要重写(使用示例值):

http://test.domain.com/company.php?companynumber=05614768

到:

http://test.domain.com/company/05614768/

这是我设法进行重写但 404 的一对夫妇:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/company\.php$
RewriteCond %{QUERY_STRING} ^companynumber=([0-9]*)$
RewriteRule ^(.*)$ http://test.domain.com/company/%1/? [R,L]

RewriteEngine On
RewriteCond %{QUERY_STRING} ^companynumber=([0-9]*)$
RewriteRule ^company\.php$ http://test.domain.com/company/%1/? [R,L]

我猜我需要弄清楚如何进行内部重定向以及外部重定向?但我真的很挣扎......

Centos 6.6 / Apache 2.4.12

【问题讨论】:

  • @mario - 如果我理解,是的,我想是的。我试图让它做一个内部重定向以及外部重定向(我认为这是有效的)。谢谢

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

现在,如果这是您从旧到新的重定向:

RewriteCond %{QUERY_STRING} ^companynumber=([0-9]*)$
RewriteRule ^company\.php$ http://test.domain.com/company/%1/? [R,L]

然后通过以下方式重新映射新的传入 URL:

RewriteRule ^company/(\d+)/?$ company.php?companynumber=$1 [END]

请注意:

  • 必须是规则之后
  • 应携带[END] 标志以避免另一轮内部重写。
  • 仅允许数字 \d+ 占位符。

另请参阅Reference: mod_rewrite, URL rewriting and “pretty links” explained 上的“乒乓重写”。这些重写应仅用作临时措施。在您的 HTML 模板中建立新的 URL。

【讨论】:

  • 非常感谢@Mario!我现在将尝试使用上述内容并报告。非常感谢。
  • 那行得通。太感谢了!你在 2 分钟内完成了我需要几周的时间。再次感谢!
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 2013-02-19
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多