301如何将带有查询字符串的动态页面重定向到静态页面?

时间:2019-01-03 17:06:01

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

我曾经有一个照相馆,可以动态生成每张照片1页,并为每个页面的url分配一个唯一的查询字符串,例如:

https://www.example.com/photos/index.php?start=1https://www.example.com/photos/index.php?start=2

由于我的图库中没有大量照片,因此我将每个页面都变成了静态网址(这可能有助于他们的seo排名)。这些页面现在具有静态网址,例如:

https://www.example.com/photos/winterstorm2007.phphttps://www.example.com/photos/new-chickens.php

这是我在照片目录内的htaccess文件中尝试过的操作-只是抛出404错误:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^index\.php?start=1 [NC]
RewriteRule (.*) /photos/winterstorm2007.php [R=301,L]

RewriteCond %{QUERY_STRING} ^index\.php?start=2 [NC]
RewriteRule (.*) /photos/pastured-chickens.php [R=301,L]

1 个答案:

答案 0 :(得分:1)

QUERY_STRING变量仅包含URL中?之后的查询部分。

您可以使用THE_REQUEST来匹配REQUEST_URI并查询:

RewriteCond %{THE_REQUEST} /index\.php\?start=1\s [NC]
RewriteRule ^ /photos/winterstorm2007.php? [R=301,L]

RewriteCond %{THE_REQUEST} /index\.php\?start=2\s [NC]
RewriteRule ^ /photos/pastured-chickens.php? [R=301,L]

还请注意在目标URI中结尾?,以剥离先前的查询字符串。