Mod_rewrite - 重写条件不起作用

时间:2012-04-20 18:17:47

标签: php .htaccess

我正在构建一个php框架,将所有流量重定向到ROOT / public / index.php,然后将url放入get请求中。我的问题是我的RewriteConds没有工作,并且正在接受文件和foldernames。

根目录中的

<IfModule mod_rewrite.c>

 RewriteEngine on
 RewriteRule    ^$    public/    [L]
 RewriteRule    (.*) public/$1    [L]

</IfModule>

<files .htaccess>

 order allow,deny
 deny from all

</files>

在公共目录中

<IfModule mod_rewrite.c>

  RewriteEngine On

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

</IfModule>

2 个答案:

答案 0 :(得分:1)

[L]标志告诉Apache在匹配规则后停止重定向。因此,假设您的ROOT文件夹首先出现,它将在重定向时运行并停止,这将导致第二个重定向无用。

解决问题有这个:

 RewriteEngine on
 RewriteRule    ^$    public/   
 RewriteRule    (.*) public/$1   

答案 1 :(得分:0)

如果您想将现有文件和目录重定向到您的脚本:

公共目录中的

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>

我的2分提示:删除?url$1部分,然后查看$_SERVER['REQUEST_URI']中的内容。