.htaccess mod_rewrite 301 редирект с шаблоном - PullRequest
1 голос
/ 17 ноября 2011

Я изменил свою структуру URL, чтобы удалить категорию из URL страниц элементов.

Мне нужен какой-то способ перенаправления всех старых страниц на новые, используя mod_rewrite. У меня уже есть довольно сложный и грязный файл .htaccess.

Мне нужно перенаправить: http://example.com/category-name/item-name/ к этому http://example.com/download-item-name/

Прямо сейчас у меня это есть в файле htaccess.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]
RewriteRule ^download-([^/]*)/screenshots/$ /screenshots.php?screenshots=$1 [L]
RewriteRule ^download-([^/]*)/screenshots/([^/]*)/$ /screenshots.php?screenshots=$1&shot=$2
#and now without trailing slash, so request will hit script which can do redirect.
RewriteRule ^download-([^/]*)/screenshots/([^/]*)$ /screenshots.php?screenshots=$1&shot=$2 [L]
RewriteRule ^feed/([^/]*)/$ /feed/?category=$1 [L]
RewriteRule ^download-([^/]*)-software/$ /category.php?category=$1 [L] 
#this needs to stay above the below rule
RewriteRule ^download-([^/]*)/$ /software.php?shortname=$1 [QSA]

RewriteRule ^download-([^/]*)/([^/]*)/$ /software.php?shortname=$1&lang=$2 [QSA]

#and now without trailing slash, so request will hit script which can do redirect.
RewriteRule ^download-([^/]*)$ /software.php?shortname=$1 [QSA]

RewriteRule ^download-([^/]*)/([^/]*)$ /software.php?shortname=$1&lang=$2

RewriteRule ^downloading/([^/]*)/$ /download.php?downloading=$1
RewriteRule ^downloading/([^/]*)/([^/]*)/$ /download.php?downloading=$1&lang=$2 [L]
RewriteRule ^download/([^/]*)/([^/]*)/$ /send.php?key=$1&s=$2 [QSA]
RewriteRule ^FQ-([^/]*)/$ /content.php?page=$1 [L]
RewriteCond %{REQUEST_URI} ^(/[^/]+)(/.*)?$
RewriteCond %{DOCUMENT_ROOT}/categories%1/ -d
RewriteRule . /categories%{REQUEST_URI} [QSA]
Options -Indexes
FileETag None
ErrorDocument 404 http://example.com/404/
ErrorDocument 403 http://example.com/

#Some redirects
Redirect 301 /audio-video-players-codecs/zoom-player-max/ http://example.com/download-zoom-player-max/
Redirect 301 /audio-video-players-codecs/zoom-player-premium/ http://example.com/download-zoom-player-premium/
Redirect 301 /audio-video-players-codecs/zoom-player-pro/ http://example.com/download-zoom-player-pro/

1 Ответ

1 голос
/ 17 ноября 2011

Ваш .htaccess беспорядочный из-за простых вещей:

Правило № 1: избегайте смешивания директив Redirect и RewriteRules.Это только запутает вещи. всегда есть возможность заменить Redirect директивами RewriteRules.

Правило № 2: , если вам не нужен RewriteBase / (что частодело, потому что база часто /), не пишите это.Это только запутает вещи.Чем короче, тем лучше (это то, что она говорит мне (просто шучу)).

Правило № 3: : ^(.*)$ совпадает с (.*),Здесь также все проясняется.

Правило № 4: : специальное правило для вас: вы можете уменьшить на 2 почти все ваши RewriteRules, используя такую ​​вещь, как ^downloading/([^/]*)(/([^/]*))?/, которая делает второеАргумент пуст, но соответствует одному или двум аргументам (только в вашем Php вы можете получить пустой второй аргумент).Чем короче, тем лучше.

Тогда, чтобы ответить на ваш вопрос: перенаправить: http://example.com/category-name/item-name/ на этот http://example.com/download-item-name/

RewriteRule ^category-([a-zA-Z]+)/item-([a-zA-Z]+)/ ^download-item-$2/ [QSA,R]

Это должно работать


Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...