2009-09-11 38 views
0

我在底部的正則表達式有問題。我試圖通過索引文件通過所有模式 index.php,robots.txt和任何css和js文件,但我有一個特定的路徑,我需要通過php處理js和css文件。通常情況下我的URL結構是這樣的:htaccess正則表達式 - 不遵循模式

example.com/class/function

可以說,我要處理來自下方的圖案CSS和JS文件:

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

通常我會想到這段代碼工作,但它不會:

一些奇怪的原因,此代碼的工作(除去「視圖」,並加入/前(。*)):

(\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] 

回答

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] 
+0

我沒有考慮將它們分開,但如果我想將它們組合起來,不應該(?!view/file)起作用嗎? – Dennis 2009-09-11 16:39:40

+1

丹尼斯,我認爲湯姆海格的想法(和我)不需要負面看法,因爲它很混亂,很難判斷它是否「應該」起作用。在mod_rewrite中,有時候更容易定義你想要匹配的內容以及它應該被重寫的內容。 – bmb 2009-09-11 17:57:04

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]