这是 Wordpress 的另一个版本,原来的版本没有按预期工作。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.php$ - [END]
RewriteCond $1 ^(index\.php)?$ [OR]
RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ - [END]
RewriteRule ^ /index.php [L]
</IfModule>
# END WordPress
来自此 Github存储库的参考,稍作修改。经过过度测试后,这条规则并不能解决所有问题。我们有一个 Wordpress 网上商店,它有 40 个插件,并且在某个地方存在重写冲突。我真诚地希望下一个版本的 Wordpress 没有 URL 重写。
RewriteRule ^index\.php$ - [L]
表示字符串的^
开始,\
转义.
或表示任何字符,并$
表示字符串的结束。
^index\.php$
if http(s)://hostname/ index.php -
do nothing[END]
标志不仅可以用来终止当前轮的重写处理,而且可以防止任何后续的重写处理。
RewriteCond $1 ^(index\.php)?$ [OR]
在RewriteCond
使用作为测试字符串引用从 url http(s): //hostname/bla/bla.php$1
的开头到结尾的所有内容的捕获内容。如果在替换或条件中使用,则它引用捕获的反向引用。对于 http(s): //hostname/bla/ble.php捕获into和into 。可以通过 访问多个捕获组。RewriteRule (bla)/(ble\.php)$ -
bla
$1
ble.php
$2
$3..N
( )
将几个字符组合成一个单元,?
强制匹配可选。
[OR]
flag 允许您将重写条件与逻辑 OR 关系结合起来,而不是默认的 AND。
简而言之,如果bla/bla.php包含 index.php 或下一个条件
RewriteCond $1 \.(gif|jpg|png|ico|css|js)$ [NC,OR]
( )
将几个字符组合成一个单元,|
将字符分隔为子组,并在其中任何一个条件下对它们进行条件化。
[NC]
flag 导致 RewriteRule 以不区分大小写的方式匹配。
简而言之,如果bla/bla.php以任何文件类型或下一个条件结尾
RewriteCond %{REQUEST_FILENAME} -f [OR]
服务器变量是 %{ NAME_OF_VARIABLE } 形式的变量,其中 NAME_OF_VARIABLE 可以是从以下列表中获取的字符串:
%{REQUEST_FILENAME}
是匹配请求的文件或脚本的完整本地文件系统路径,如果在引用 REQUEST_FILENAME 时服务器已经确定了这一点。否则,例如在虚拟主机上下文中使用时,与 REQUEST_URI 的值相同。根据 AcceptPathInfo 的值,服务器可能只使用了 REQUEST_URI 的一些前导组件来将请求映射到文件。
-f
检查常规文件。将测试字符串视为路径名并测试它是否存在。
简而言之,如果bla/bla.php是一个文件或下一个条件
RewriteCond %{REQUEST_FILENAME} -d
-d
检查目录。将测试字符串视为路径名并测试它是否存在。
简而言之,如果bla/bla.php是一个目录
RewriteRule ^(.*)$ - [END] not as in Github [S=1]
此语句仅在其中一个条件返回 true 时执行。
.
匹配任何字符*
零次或多次。
该[S]
标志用于跳过您不想运行的规则。跳过标志的语法是[S=N]
,其中N
表示要跳过的规则数(前提是 RewriteRule 匹配)。这可以被认为是重写规则集中的 goto 语句。在以下示例中,我们只想在请求的 URI 与实际文件不对应时运行 RewriteRule。
简而言之,什么都不做
RewriteRule ^ /index.php [L]
该[L]
标志导致 mod_rewrite 停止处理规则集。在大多数情况下,这意味着如果规则匹配,则不会处理更多规则。这对应于 Perl 中的最后一条命令,或 C 中的 break 命令。使用此标志指示应立即应用当前规则而不考虑进一步的规则。
简而言之,将每个路径重写为 http(s)://hostname/ index.php
我从 apaches.org 文档中一起获取了这个小文档。下面的链接。