我有一個RewriteRules的問題。htaccess重寫規則問題
我目前使用這個規則:
RewriteRule ^([^/.]+)/?$ index.php?clip=$1
這工作正常的鏈接,因爲這些,其中$_GET['clip']
是斜槓後的值:
但不適合那些有一個點字符,如下所示:
http://example.com/abcdefg.png
我應該如何更改RewriteRule以使其適用於此類鏈接?
我有一個RewriteRules的問題。htaccess重寫規則問題
我目前使用這個規則:
RewriteRule ^([^/.]+)/?$ index.php?clip=$1
這工作正常的鏈接,因爲這些,其中$_GET['clip']
是斜槓後的值:
但不適合那些有一個點字符,如下所示:
http://example.com/abcdefg.png
我應該如何更改RewriteRule以使其適用於此類鏈接?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1
我不會建議這種技術,因爲它會導致一個額外的磁盤讀取,以檢查該文件是否存在... 如果有我會建議組織的方式你的目錄結構的可能性, Apache可以從目錄中知道該做什麼。從我的框架中的例子:
# skip whitelisted directories
RewriteRule ^(test|skin|stylesheets|images|javascripts|favicon|robots\.txt|index\.php) - [L]
RewriteRule ([-_\w\/]*) index.php?p=$1 [NE,NC,QSA]
您匹配任何不包含「/」或「。」的字符串。如果你想比賽進行到包括擴展,可以使用:
RewriteRule ^([^/]+)/?$
如果你不關心它:
RewriteRule ^([^/.]+)
試試這個代碼:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ index.php?clip=$1
這將防止它忽略服務器上真正存在的文件。所以http://example.com/abcdefg.png
將工作,只要/abcdefg.png
存在。
此外,您在重寫規則中使用的正則表達式需要稍微更改,我刪除了.
,因爲您正在阻止它。
閱讀評論我添加到nhnb。謝謝! :) – Codecat 2010-08-07 14:13:23
這與jordanstephens答案一起使完美。謝謝! – Codecat 2010-08-07 14:12:52