Я хочу удалить "[" и "]" из URL-адресов и перенаправить на правильную ссылку.
Вот пример URL:
/forums/garage-150/cool-cars-sightings-[archived]-7610/index127.html
Необходимо перенаправить на:
/forums/garage-150/cool-cars-sightings-archived-7610/index127.html
Вот то, что я написал до сих пор, но все еще не работает ..
Options +FollowSymlinks
Options +Indexes
RewriteEngine on
RewriteRule ^/forums/(.*)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301]
Ваша директива выглядит нормально, кроме случаев, когда она находится в .htaccess
тогда вам нужно удалить префикс косой черты из RewriteRule
шаблон. Например:
RewriteRule ^forums/(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]
RewriteRule
директивы в каталог контекст (который включает .htaccess
) соответствует URL-пути меньше префикса каталога. В префикс каталога всегда заканчивается косой чертой, поэтому URL-путь, RewriteRule
шаблон матчи против никогда не начинаются с косой черты.
Возможно, вам потребуется добавить L
отметьте, если у вас (планируете) будет больше директив. (Я также изменил первую захваченную группу с .*
к .+
, поскольку совпадение нулевой ширины здесь невозможно.
ОБНОВИТЬ:
Htaccess, в который я поместил этот код, находится в
/
каталог. А также есть.htaccess
в/forums
каталог
Если есть существующий .htaccess
файл в /forums
подкаталог, который также использует mod_rewrite, тогда (по умолчанию) это полностью переопределит указанную выше директиву (в вашем корне .htaccess
файл). Вышеуказанная директива даже не будет обработана.
Самый простой способ решить эту проблему - переместить указанную выше директиву в /forums/.htaccess
файл (вверху). Поскольку это перенаправление относится к форуму, это также кажется наиболее логичным подходом. Однако вам также потребуется изменить RewriteRule
шаблон читать:
RewriteRule ^(.+)/(.+)\[(.+)\](.+)/(.+)$ /forums/$1/$2$3$4/$5 [R=301,L]