Удалить уродливый? Pg = 1 из URL через .htacess RewriteRule - PullRequest
0 голосов
/ 05 января 2011

В моей CMS есть плагин для разбивки на страницы, который выдает? Pg = 1 ссылки. Я хочу перенаправить этот URL без этого уродливого постфикса, потому что без него CMS также показывает первую страницу.

Итак, у меня есть URL как http://site.ru/category/schock-crane/?pg=1 или http://site.ru/moyka/?type=granit&pg=1 Я хочу перенаправить такие URL-адреса на http://site.ru/category/schock-crane/ и http://site.ru/moyka/?type=granit соответственно.

Я попробовал этот код .htaccess

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

Я попробовал этот код регулярного выражения у инструкторов регулярного выражения - это сработало. Но на реальном сервере перенаправление не происходит.

Вот весь файл .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 голосов
/ 05 января 2011

Может быть, пропавшие без вести ^ или / убивают перенаправление

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

или попробуйте

RewriteRule ^(.*)(&|\?)pg=1$ http://%{HTTP_HOST}/$1 [R=301,L]
0 голосов
/ 05 января 2011

Вам нужно использовать RewriteCond для проверки строки запроса:

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

Второй RewriteCond - это просто удалить завершающий &.

...