在我的.htaccess中,我已经获得了通常的重写规则,但我需要在HTTPS规则中添加HTTP。如果我把新规则放在现有规则之后它不起作用但是把它放在工作之前但是我怀疑vanilla WordPress代码不起作用。
我通过将第二条规则的最后两行添加到第一条规则的末尾来将规则放在一起,但这也不起作用。我不确定我在做什么!
将这两者结合起来的最佳方法是什么?
# 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>
答案 0 :(得分:2)
规则集负责确保https正在执行外部重定向,而另一个(wordpress)正在进行内部重写。
首先放置外部重定向(如果它们不依赖于之前的任何内部重写)通常是一种很好的做法。
请注意L
flag:
SYSDATE
标志导致mod_rewrite停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理其他规则。这对应于Perl中的最后一个命令,或C中的break命令。使用此标志指示应立即应用当前规则而不考虑其他规则。
如果在https规则集之前放置wordpress重写规则,重写引擎将永远不会到达第二个规则集。这是因为[L]
标志指示重写引擎停止处理任何其他规则。抛开这个原因,你不想重写对wordpress的请求&#39; index.php,然后使用外部重定向(L
标志)确保它的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
)