在 mod rewrite 开启的情况下访问目录

在 mod rewrite 开启的情况下访问目录

我正在使用以下 .htaccess 文件来保持我的 URL 干净

RewriteEngine On
RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3

到目前为止它都可以工作,但是我现在想访问一个目录。

例如。如果有人访问 mysite.com/news/post-title,则 URL 会被重写,一切正常。

现在我想要一个目录,当有人访问 mysite.com/directory 时可以查看该目录并显示其内容。

有没有办法做到这一点?

答案1

RewriteCond在每个 前面放置,如果请求的位置是目录并且存在,则RewriteRule强制跳过 。RewriteRule

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3

这些命令只会返回实际的目录列表。如果您希望允许用户访问这些目录中的文件,您还应该为每个检查文件是否存在的命令添加一个条件:

RewriteCond %{REQUEST_FILENAME} !-f

答案2

我会选择以下类似的东西;

<Location /Somedirectory>
    Options Indexes
</Location>

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -d [NC]
RewriteRule ^/Somedirectory - [L]

RewriteRule ^([a-zA-Z\-0-9]+)/?$ index.php?get1=$1 [B]
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?get1=$1&get2=$2&get3=$3

相关内容