.htaccess:如果不是目录public,则将名称传输到index.php

时间:2013-08-09 18:36:49

标签: .htaccess

我有这段代码:

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。我怎么能这样做?

2 个答案:

答案 0 :(得分: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之内公开的其他路径,请{/ 1}}使用

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

答案 1 :(得分: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>