htaccess重写条件以排除文件类型除了具有特定父目录的条件

时间:2013-04-13 12:28:31

标签: apache .htaccess mod-rewrite

我有一个.htaccess文件,配置为几乎将所有请求路由到我的根index.php文件,除了一组特定的文件扩展名(images,css,js,ect)。但是我需要稍微调整一下这个逻辑,我希望将其中一个排除文件扩展名的请求路由到index.php,如果它包含在特定目录中(可能位于该目录的子文件夹中)。目前我有:

RewriteEngine on
RewriteCond $1 !\.(gif|jpg|png|ico|css|js|swf|wav|mp3|less|cur)
RewriteRule ^(.*)$ index.php/$1 [L]

如果.css文件的请求在RewriteCond的根目录内某处,则需要{.1}确保将.css文件的请求重写为index.php。例如,我希望请求/docs路由到index.php,但请求/docs/subfolder/anotherfolder/myfile.css继续不路由到index.php?

2 个答案:

答案 0 :(得分:4)

您可以使用[OR]标志添加额外的css条件(即使第一个条件失败):

RewriteEngine on
RewriteCond $1 !\.(gif|jpg|png|ico|css|js|swf|wav|mp3|less|cur) [OR]
RewriteCond %{REQUEST_URI} ^/docs/.*\.css$
RewriteRule ^(.*)$ index.php/$1 [L]

这里[OR]标志在逻辑上是“或”是2个条件。因此,即使请求的文件以''css''结尾,也会检查第二个条件。我给出的示例正则表达式只是说它必须以/docs/开头,并以.css结尾。如果已满,则第一个条件不需要,请求将路由到index.php

答案 1 :(得分:1)

您可以有两条规则。第一个规则通过docs将所有CSS文件路由到index.php目录下的某个位置。其他所有内容都将由第二条规则处理

RewriteEngine on

RewriteRule ^docs/.*\.css$ index.php/$0 [L]

RewriteCond $0 !\.(gif|jpg|png|ico|css|js|swf|wav|mp3|less|cur)
RewriteRule ^.*$ index.php/$0 [L]