我的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
任何线索?我一直在玩这个约一个小时,我很难过......
此致 安德鲁
答案 0 :(得分:2)
您的第二个重写规则(及其相应的条件)看起来会停止重写任何网址。如果文件没有正确的扩展名,或者不是文件,或者不是目录,或者不是链接,则匹配。没有资源可以同时是文件和目录以及链接,因此所有URL都匹配 - 并且它们都将按原样传递,因为[L]标志会阻止任何后续重写。
如果您的目的是防止重写与现有文件,链接或目录相对应的URL,请从您的条件中删除!并从检查文件扩展名的条件中删除[OR]。