2017-01-09 138 views
1

在我的.htaccess中,我已經有了通常的重寫規則,但我需要向HTTPS規則添加一個HTTP。如果我將新規則放在現有規則之後,它不起作用,但在作品之前放入它,但是我懷疑vanilla WordPress代碼不起作用。Combine 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中的最後一個命令或C中的break命令。使用此標誌來指示當前規則應立即應用,而不考慮其他規則。

如果您在https規則集之前放置了wordpress重寫規則,重寫引擎將永遠不會到達第二個規則集。這是因爲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
  • 最好爲https和www重定向使用301重定向。 (R=301