php

apache的.htaccess规则

2023-03-23

<IfModule mod_rewrite.c>

    <IfModule mod_negotiation.c>

        Options -MultiViews

    </IfModule>


    # 打开Rerite功能

    RewriteEngine On


    # Redirect Trailing Slashes If Not A Folder...

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)/$ /$1 [L,R=301]


    # 如果访问的文件或目录不是真实存在,分发请求至 index.php,如果请求的是真实存在的文件或目录,直接访问

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_FILENAME} !-f


    RewriteRule ^ index.php [L]

</IfModule>


伪静态%{REQUEST_FILENAME} !-f 和!-d用法

%{REQUEST_FILENAME} !-f 和!-d只对下一条RewriteRule起作用。再往下的RewriteRule不管用。

-f  表示为文件

-d 表示为目录

! 表示非,取反的意思

RewriteCond %{REQUEST_FILENAME} !-f  (如果不是文件,才会执行下一条RewriteRule)

RewriteCond %{REQUEST_FILENAME} !-d (如果不是目录,才会执行下一条RewriteRule)

切记,只生效下一条,再下一条就不管用了,再下一条则会以全局形式匹配,没有条件判断。