重写逻辑突破?

时间:2010-08-30 23:05:25

标签: mod-rewrite apache2 kohana rewrite

我的vHost中有以下重写逻辑,所有内容似乎都在重定向子域,但是只要我添加URI的路径,我就会在apache_error.log中收到错误。

这是重写逻辑:

    RewriteEngine On

    # Remove the www alias
    RewriteCond %{HTTP_HOST} ^www\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ http://13labs.net$1 [R=301,L]

    RewriteCond %{REQUEST_URI} ^.+$
    RewriteCond %{REQUEST_FILENAME} !\.(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf)$ [OR]
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d [OR]
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^ - [L]

    RewriteCond %{HTTP_HOST} !^www\.13labs\.net$ [NC]
    RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.13labs\.net$ [NC]
    RewriteRule ^(.+)$ /index.php?subdomain=%2&kohana_uri=$1 [PT,L,QSA]

    RewriteRule ^(.+)$ /index.php?kohana_uri=$1 [PT,L,QSA]

我想点击admin.13labs.net/login,这应该重写为13labs.net/index.php?subdomain=admin&kohana_uri=/login。但是,在我的apache_error.log中,我收到以下内容:

[Mon Aug 30 23:56:06 2010] [error] [client 74.63.151.37] File does not exist: /var/www/13labs.net/html/login

任何线索?我一直在玩这个约一个小时,我很难过......

此致 安德鲁

1 个答案:

答案 0 :(得分:2)

您的第二个重写规则(及其相应的条件)看起来会停止重写任何网址。如果文件没有正确的扩展名,或者不是文件,或者不是目录,或者不是链接,则匹配。没有资源可以同时是文件和目录以及链接,因此所有URL都匹配 - 并且它们都将按原样传递,因为[L]标志会阻止任何后续重写。

如果您的目的是防止重写与现有文件,链接或目录相对应的URL,请从您的条件中删除!并从检查文件扩展名的条件中删除[OR]。