.htaccess到nginx重写规则,不包括某些文件夹

时间:2012-05-07 09:55:28

标签: .htaccess nginx rewrite

所以我试图将一个应用程序从apache移动到NginX,但我发现我需要重新编写.htaccess文件,我已经好好看看了,但最后我需要寻求帮助。

以下是来自apache的.htaccess文件,我试图将所有请求重定向到index.php,除了对/ html,/ css,/ images,/ php的请求。

提前感谢您的帮助! 比尔

RewriteEngine on 
RewriteRule ^html [L,NC]
RewriteRule ^css [L,NC]
RewriteRule ^images [L,NC]
RewriteRule ^php [L,NC]
RewriteRule ^.*$ index.php [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !directory/(.*)$
RewriteCond %{REQUEST_URI} !(.*)$
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

到目前为止,我有以下内容,并且对html,css,图像和php文件的请求运行良好。

但是,当我向www.domain.com/blah/blah/blah/提出404请求时,我真正想要的是将网址重新设置为www.domain.com/blah/blah/blah/但加载index.php文件

location ~ directory/(.*)$ {
}

location ~ (.*)$ {
}

location /html {
rewrite ^/html / break;
}

location /css {
rewrite ^/css / break;
}

location /images {
rewrite ^/images / break;
}

location /php {
rewrite ^/php / break;
}

location / {
rewrite ^(.*)$ /index.php break;
if (!-e $request_filename){
rewrite ^(.*)$ http://www.domain.com/$1 redirect;
}
}

1 个答案:

答案 0 :(得分:0)

尝试使用这些内容来过滤对特定文件夹中内容的请求:

RewriteEngine On
# if not requesting content in one of the specified folders
RewriteCond %{REQUEST_FILENAME} !^(html|css|images|php)/ [NC]
# redirect visitor to the index page
RewriteRule ^(.*)$ index.php [L,QSA]

重写条件之前的感叹号(!)表示否定,因此如果请求的文件名不是以html或css或....开头,则应用重写规则。