我正在使用以下 .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