2010-10-10 42 views
0

我想在php中設置一些小布局 - 模板框架 - 除了一件事情 - 重寫URL之外,一切都會順利進行。重寫規則好意

我吮吸正則表達式,並且我在mod_rewrite中更糟。而且我有點急於把這些東西拿出來,所以你能幫我嗎?

我需要的只有兩個規則

  1. 與巴紐/ JPG格式/ .gif注意/ .js文件/的CSS處理,因爲是結束的每個請求一個.htaccess文件。 (如:http://mysite.com/img/image.png>http://mysite.com/img/image.png

  2. 其他的一切改寫方式如下:

    http://mysite.com/foo/bar/44>http://mysite.com/public/index.php?1=foo&2=bar&3=44 http://mysite.com/>http://mysite.com/public/index.php

非常感謝的人! 如果你願意,我會把你的學分放在東西上,然後我會把它作爲開源的東西分享。

回答

1

嘗試下列規則:

RewriteRule .*\.(png|jpg|js|css)$ - [L] 
RewriteRule !^/public/index\.php$ /public/index.php [L] 

如果你想在.htaccess文件中使用這些規則,請從模式和替換上下文路徑前綴。

請注意,第二條規則不會重寫查詢參數的請求,因爲您無法使用mod_rewrite進行計數(或者至少非常困難)。

但是你可以使用由PHP(name[]=value)解釋爲陣列的語法:

RewriteRule ^/public/index\.php$ - [L] 
RewriteRule ^((/[^/]+)+)/([^/]+)$ $1?params[]=$3 [N,QSA] 
RewriteRule ^/([^/]+)$ /public/index.php?params[]=$1 [L,QSA] 

這允許任何數量的路徑段。

但我寧願建議我的第一個建議,做路徑與PHP解析:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$segments = array_filter(explode('/', $_SERVER['REQUEST_URI_PATH']), 'strlen'); 
+0

我剛剛去了後我的防空洞解決方案,我看到了這一點。我會發布我的不完整的解決方案,並接受你的合法。 – Popara 2010-10-11 23:51:17

+0

RewriteCule%{REQUEST_FILENAME}!-f \t RewriteRule ^(。*)$ public/index.php [QSA,L] – Popara 2010-10-11 23:53:00