我想在我的.htaccess文件中使用重写规则更改我的文档根目录,并将所有请求重定向到index.php
,静态资源除外
换句话说:
如果存在前缀为www
的路径的文件(即www/{%request_uri}
):
http://domain.com/css/main.css
应改写为http://domain.com/www/css/main.css
如果该文件不存在,请重定向到应用主入口点www/index.php
:
e.g。
http://domain.com
应改写为http://domain.com/www/index.php
http://domain.com/hello
应改写为http://domain.com/www/index.php/hello
http://domain.com/hello?a=1
应改写为http://domain.com/www/index.php/hello?a=1
我尝试了各种变体,但要么它给我们500个内部服务器错误,要么无限循环。这是一个给出500内部服务器错误的文件:
# try to find it in www/
RewriteCond {%DOCUMENT_ROOT}/www%{REQUEST_URI} -f
RewriteCond {%DOCUMENT_ROOT}/www%{REQUEST_URI} -d
RewriteRule ^(.+) www/$1 [L]
RewriteRule ^(.*) www/index.php/$1 [L]
这个也是:
RewriteCond %{REQUEST_URI} !www/
RewriteRule (.*) /www/$1
RewriteCond {%REQUEST_FILENAME} !-f
RewriteCond {%REQUEST_FILENAME} !-d
RewriteRule www/(.*) /www/index.php/$1 [PT,L]
有人可以帮忙吗?
答案 0 :(得分:1)
我认为使用单个.htaccess
是不可能的,但有两个可能。
您的根目录中需要一个/.htaccess
:
RewriteEngine on
RewriteBase /
# We don't want infinite rewriting.
RewriteCond %{REQUEST_URI} !www/.*$
RewriteRule ^(.*)$ www/$1 [L]
您的www目录中的另一个,/www/.htaccess
:
RewriteEngine on
RewriteBase /www
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
答案 1 :(得分:0)
%
符号应位于{}
括号之外!
这可以在root目录中的一个.htaccess中完成:
RewriteEngine on
RewriteCond %{REQUEST_URI} !www/
RewriteRule ^(.*)$ www/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^www/(.*)$ www/index.php/$1 [L]