我在底部的正则表达式有问题。我试图通过索引文件传递所有模式除了 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]
答案 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]