1

我有这段代码:

Options FollowSymLinks
<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^(.*)$ index.php?url=$1 [L]
</IfModule> 
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

我不知道如何只允许名称为“public”的目录,该目录位于 .htaccess 所在的文件夹中,除此目录之外的其他名称应转移到 index.php。我怎么能那样做?

4

2 回答 2

1

添加另一个RewriteCond以排除公共目录

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_URI} ^/public(/.*)?$
RewriteRule ^(.*)$ index.php?url=$1 [L]

现在,重定向仅适用于/public目录。如果您希望url只拥有公共以下的其余路径url=subfolder/page.php/public/subfolder/page.php使用

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^public/?(.*)$ index.php?url=$1 [L]
于 2013-08-09T18:46:41.580 回答
0

用这个改变你的代码:

Options +FollowSymLinks -MultiViews
<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule (?!^public(/.*|)$)^(.*)$ index.php?url=$1 [L,NC,R=302]

    ErrorDocument 404 /index.php
</IfModule>
于 2013-08-09T18:50:38.920 回答