通过.htaccess RewriteRule从URL删除丑陋的?pg = 1

时间:2011-01-05 01:09:31

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

我的CMS中有分页插件,可生成?pg = 1链接。我想重定向这个网址没有这个丑陋的后缀,因为没有它CMS也显示第一页。

所以,我的网址有http://site.ru/category/schock-crane/?pg=1http://site.ru/moyka/?type=granit&pg=1 我想将这些网址重定向到http://site.ru/category/schock-crane/http://site.ru/moyka/?type=granit

我试过这个.htaccess代码

RewriteRule (.*)(&|\?)pg=1$ $1 [R=301,L]

我在regexp培训师处尝试了这个正则表达式代码 - 它有效。但是在实时服务器上没有重定向。

这是整个.htaccess文件:

AddDefaultCharset Off
#DirectoryIndex index.php index.html

Options +FollowSymLinks
Options -Indexes

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # fix /?pg=1
    RewriteRule (.*)(&|\?)pg=1$ $1 [R=301,L]

    # fix .palitra-tab
    RewriteCond %{REQUEST_URI} -tab$
    RewriteRule (.*)/([0-9]*)/\.(.*)-tab?$ http://site.ru/redirect.php?id=$2 [R=301,L]

    RewriteCond %{REQUEST_URI} ^/csss/.* [NC]
    RewriteRule csss/(.*)\.css$ css.php?n=$1 [L]

    #RewriteRule ^(.*)/csss/(.*) /test.php [L]

    RewriteRule ^(.*)/base([0-9]+)/?$ $1?base=$2 

    #RewriteCond %{REQUEST_FILENAME} -f
    #RewriteRule \.(gif|jpeg|jpg|png)$ /images/watermark/index.php [L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.+) - [PT,L]

    RewriteCond %{REQUEST_URI} !=/favicon.ico
    RewriteRule ^(.*) index.php

    RewriteCond %{HTTP:Authorization}  !^$
    RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

2 个答案:

答案 0 :(得分:0)

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

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)pg=1(&(.*)|$)
RewriteCond %1%4 (.*?)&?$
RewriteRule ^ %{REQUEST_URI}?%1 [R=301,L]

第二个RewriteCond只是删除一个尾随的&

答案 1 :(得分:0)

可能缺少^/会导致重定向

# fix /?pg=1
RewriteRule ^(.*)(&|\?)pg=1$ /$1 [R=301,L]

或尝试

RewriteRule ^(.*)(&|\?)pg=1$ http://%{HTTP_HOST}/$1 [R=301,L]