2

我想在我的 .htaccess 文件中使用重写规则来更改我的文档根目录,并将所有请求重定向到index.php静态资源除外

换句话说:

  1. 如果路径前缀为www存在的文件(即www/{%request_uri}): http://domain.com/css/main.css应重写为http://domain.com/www/css/main.css

  2. 如果该文件不存在,则重定向到应用程序主入口点www/index.php:例如

    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]

任何人都可以帮忙吗?

4

2 回答 2

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]
于 2013-02-01T11:58:47.780 回答
0

好吧,实际上我犯了一个愚蠢的错误!%标志应该在括号{}之外!

这可以在根目录中的一个 .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]
于 2013-02-01T12:19:37.850 回答