.htaccess 查询字符串重写

.htaccess Query String Rewrite

几个小时以来一直在兜圈子,希望能得到一点帮助。

我正在尝试重写包含查询字符串(前面有 company.php)的 URL。

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

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

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

至:

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

这是我设法重写但 404ing 的一对:

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

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

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

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

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

注意这个:

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

另请参见 Reference: mod_rewrite, URL rewriting and “pretty links” explained 上的 "Ping-Pong rewrites"。这些重写应该只是作为临时措施。在您的 HTML 模板中建立新的 URLs。