2015-10-06 4 views
0

У меня есть это правило, которое работает хорошо.htaccess: перенаправление постоянного и остановить новые правила

RedirectMatch 301 ^/(.*?)-/(.*)$ /$1/$2 

перенаправляет к примеру

http://example.com/category-/list/town/id/id2/country ->

http://example.com/category/list/town/id/id2/country

Проблема в том, что позже .htaccess добавляет дополнительный запрос p arameters.

Моя цель: когда это правило матчи, то не применяются другие правила .htaccess

Я попытался с:

RewriteRule ^/(.*?)-/(.*)$ /$1/$2 [R=301,L] 

и правило не применяется на всех!

+2

Это будет 'RewriteRule^(. *?) -/(. *) $ ...' – hjpotter92

ответ

1

Как @ hjpotter92, упомянутый в комментариях, шаблон без ведущий косая черта в файлах .htaccess. См Apache mod_rewrite Technical Details

В каждом каталоге контекста (то есть, в пределах .htaccess файлов и блоков каталогов), эти правила применяются после того, как URL уже переведен на имя файла. Из-за этого URL-путь, который mod_rewrite первоначально сравнивает с директивами RewriteRule, представляет собой полный путь файловой системы к переведенному имени файла с текущим каталогом (включая конечную косую черту), удаленную спереди.

Чтобы проиллюстрировать: Если правила находятся в /var/www/foo/.htaccess и обрабатывается запрос для /foo/bar/baz, то выражение, подобное ^bar/baz$, будет соответствовать.

RewriteRule имеет аналогичную ноту в разделе «Переписывание за один каталог».

Так что ваше правило должно выглядеть

RewriteRule ^(.*?)-/(.*)$ /$1/$2 [R,L] 

Если у вас есть эта RewriteRule, вам не нужно больше RedirectMatch.

Смежные вопросы