2017-01-09 2 views
1

В моем .htaccess у меня есть обычные правила перезаписи, но мне нужно добавить правило HTTP для HTTPS. Если я положу новое правило после существующих правил, это не сработает, но поставит его перед работами, но потом я подозреваю, что код Vanilla WordPress не работает.Комбинация правил mod_rewrite

Я объединил правила, добавив последние две строки второго правила в конец первого, но это тоже не работает. Я не уверен, что делаю!

Каков наилучший способ объединения этих двух?

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://127.0.0.1/$1 [R,L] 
</IfModule> 

ответ

2

Набор правил, который отвечает за обеспечение HTTPS делает внешний перенаправлять, в то время как другой (WordPress) делают внутренние переделки.

Часто бывает полезно сначала перенести внешние переадресации (если они не зависят от предыдущей внутренней перезаписи).

Обратите внимание на L flag:

Флаг [L] вызывает mod_rewrite прекратить обработку набора правил. В большинстве контекстов это означает, что если правило совпадает, дальнейшие правила не будут обработаны. Это соответствует последней команде в Perl или команде break в C. Используйте этот флаг, чтобы указать, что текущее правило следует применять немедленно, не учитывая дальнейшие правила.

Если вы поставите WordPress правила перезаписи перед Https набором правил, переписывающийся двигатель никогда не получит ко второму набору. Это из-за флага L, который инструктирует механизм перезаписи прекратить обработку любых других правил. В этой причине вы не хотите переписывать запрос на wordpress 'index.php, а затем убедиться, что это https с использованием внешнего перенаправления (R), правильно?

Таким образом, вы можете попробовать это:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    # HTTPS: 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://127.0.0.1/$1 [R,L] 

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

Несколько финальных нот:

  • Вам нужно только один RewriteEngine on и один IfModule.
  • Лучше использовать перенаправление 301 для переадресации https и www. (R=301)

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

  • Нет связанных вопросов^_^