2015-06-16 2 views
0

Моего .htaccess файла:Перенаправление всех .html файлов в корневую папку с помощью HTAccess

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L] 

    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

После reading this answer я попытался добавить RewriteRule ^(.*)\.html$/[L,R=301] после RewriteCond %{REQUEST_FILENAME} !-d который перенаправляет HTML файлов в корневую папку, но другой URL перестает работать.

PS: Я не привык к файлам .htaccess.

+2

поставил его над RewriteCond – splash58

+0

@ splash58 вы имеете в виду выше 'RewriteCond% {REQUEST_FILENAME}! -f' код? –

+1

Да, потому что Cond влияет только на 1-е правило – splash58

ответ

1

Вы должны поставить новый RewriteRule перед тем RewriteConds, потому что она не нуждается в каких-либо условий для редиректа.

Кроме того, вы сохраняете старые правила переадресации. RewriteCond влияет только на 1-й RewriteRule после него. Размещение нового RewriteRule после RewriteConds делает старый RewriteRule во всех случаях без каких-либо ограничений.

Таким образом, фрагмент вашего HTAccess должен выглядеть

RewriteRule ^(.*)\.html$/[L,R=301] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
1

Поместите код корень перенаправлять выше кода WordPress, как это:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L] 

    # This will check that the .html is not a true file 
    # and if so, redirect to root 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)\.html$/[L,R=302] 

    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

Примечание, используйте R=302 (временный редирект), пока вы не будете удовлетворены переадресаций. В противном случае у вас могут быть «постоянные» перенаправления на непреднамеренные места.

0

Если я четко понимаю, ваш .htaccess теперь выглядит следующим образом:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L] 

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\.html$/[L,R=301] 
RewriteRule . /index.php [L] 
</IfModule> 

Поскольку правила RewriteCond затрагивают только один RewrtieRule под ними, это правило

RewriteRule . /index.php [L] 

теперь применяется к каждому запросу. Просто измените свой .htaccess на:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule ^pharmacy/?(.*)$ /wp-content/plugins/swift-mailer/lib/classes/$1 [L] 
RewriteRule ^(.*)\.html$/[L,R=301] 

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
Смежные вопросы