htaccess 301重定向带参数的URL

时间:2013-12-18 12:30:05

标签: php apache .htaccess mod-rewrite redirect

我的htaccess文件中有以下内容,其中包含以下网址:www.example.com/Page.php?id =约,并将其转换为www.example.com/about。唯一的问题是,当我在htaccess中设置Redirect 301s时,旧的URL没有重定向到新的URL(我理解这是因为你不应该在基本的Redirect 301s中传递参数 - 我的基本重定向的例子)我试过以下)。

Redirect 301 /Page.php?id=About http://www.example.com/about

问题在于,新URL不一定只删除当前id并将其替换为小写版本。例如,我也想:

Redirect 301 /Page.php?id=Example http://www.example.com/example-page

我希望保留重写网址的当前功能,但也希望对旧网址的任何访问重定向到新网址(即更新Google索引)。访问www.example.com/Page.php?id=About目前仍然有效但显示的内容没有内容。

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z0-9\-]+)/?$ Page.php?id=$1
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2
RewriteRule ^([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/([a-zA-Z0-9\-]+)/?$ Page.php?id=$1&tab=$2&tabid=$3

1 个答案:

答案 0 :(得分:5)

如果您将此规则添加到.htaccess,则应执行重定向的工作。它会将?id = About添加到重定向到/ about。如果您运行的是2.4.0或更高版本,则可以添加QSD标志以丢弃重定向中的查询字符串。

RewriteCond %{QUERY_STRING} ^id=About$
RewriteRule ^page.php /about [NC,R,L]