#.htaccess #redirect
#.htaccess #перенаправление
Вопрос:
У меня проблема с моими .htaccess
правилами перенаправления.
Мне нужно перенаправить страницы, заканчивающиеся на .html
, на страницы, заканчивающиеся косой чертой.
/about-us.html
Для /about-us/
Но есть также страницы, где мне нужно перенаправить на определенную страницу без .html
подобного
/gallery/first-gallery/this-is-the-gallery.html
Для /gallery/new/
Проблема в том, что мои правила плохо работают вместе, кажется, что правило перенаправления html-страниц игнорирует все остальные правила.
Вот как выглядит мой .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/?(.*).(html)$ /$1 [R=301,L]
Redirect 301 /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/131173-58e29f485064eprinceton-texas-roofing-services-1.html /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/
Redirect 301 /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/131174-58e2a063b8b06princeton-texas-roofing-services-2.html /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/
#Many other 301 rules below
</IfModule>
Поэтому, когда я набираю
domain.com/about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/131173-58e29f485064eprinceton-texas-roofing-services-1.html
в браузере он перенаправляет на domain.com/about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/131173-58e29f485064eprinceton-texas-roofing-services-1
куда мне нужно перенаправить это конкретное перенаправление /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/
Я попытался переместить RewriteRule ^/?(.*).(html)$ /$1 [R=301,L]
в самый низ, надеясь, что приведенные выше правила будут обработаны первыми, но это не сработало.
Что я могу сделать, чтобы это работало так, как мне нужно?
Ответ №1:
Прежде всего, если есть mod_alias
подобные redirect
и mod_rewrite
подобные RewriteRule
mod_rewrite
правила выполняются перед mod_alias
правилами.
Есть много способов решить эту проблему, например, исключить все другие правила перенаправления из основного rewriterule, но я думаю, что если другие правила redirect
имеют ту же цель, чтобы пропустить только последнюю часть URI, вы могли бы создать правила, подобные следующему :
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^([^/] )/([^/] )/([^/] )/([^/] ).(html)$ /$1/$2/$3 [R=301,L]
RewriteRule ^(.*).(html)$ /$1 [R=301,L]
</IfModule>
Приведенные выше правила проверят, URI
поступает ли оно в таком /something/something/something/something.html
виде /about-us/photo-gallery/17577-album-mca-corona-clay-tile-roof-princeton-texas/131173-58e29f485064eprinceton-texas-roofing-services-1.html
, затем перенаправят его в /something/something/something
, и если оно поступает не таким образом, будет применено второе правило.
Примечание: очистите кэш браузера, затем протестируйте