htaccess正则表达式 - 不要遵循模式

时间:2009-09-11 14:26:39

标签: php regex .htaccess

我在底部的正则表达式有问题。我试图通过索引文件传递所有模式除了 index.php,robots.txt和任何css和js文件,但是我有一个特定的路径,我需要通过它来处理js和css文件PHP。通常我的网址结构是这样的:

example.com/class/function

假设我想从下面的模式处理css和js文件:

example.com/view/file/xxxxx.js/css

通常我会认为这段代码可以正常工作但不会:

(.*)(?!view\/file)(.*)\.(js|css)

由于某些奇怪的原因,此代码有效(删除了'view'并添加/ before(。*)):

(\w*)(?!\/file\/)\/(.*)\.(js|css)

但是我将无法从主目录加载文件:

example.com/file.js

当我像这样修改文件时,它不再起作用了......(我所做的只是制作/可选):

(\w*)(?!\/file\/)(\/?)(.*)\.(js|css)

这是原始的htaccess文件:

RewriteCond $1 !^(index\.php|robots\.txt|(.*)\.(js|css)) 
RewriteRule ^(.*)$ /index.php/$1 [L]

2 个答案:

答案 0 :(得分:1)

假设我已经正确理解,这样的事情应该有效:

#rewrite specific css/js
RewriteRule ^view/file/(.*)\.(css|js)$ file.php?file=$1.$2 [L]

#only rewrite anything else if the path is not an existing file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#rewrite to main handler
RewriteRule ^(.*)$ index.php/$1 [L]

答案 1 :(得分:1)

为了便于阅读和调试,我建议您分一些规则。

# Rewrite the special case
RewriteRule ^view/file/(rest of rule)

# Skip these
RewriteRule ^index\.php$ - [L]
RewriteRule ^robots\.txt$ - [L]
RewriteRule ^(.*)\.(js|css)$ - [L]

# Main rule
RewriteRule ^(.*)$ /index.php/$1 [L]