我有一個.htaccess規則,基本上指明瞭通過一個頁面的所有訪問,並且我從那一點PHP處理它。因此,無論它在哪個目錄中,它都會將所有網址傳遞給此腳本。如何重寫url的子集(/ api/something)?
如果我的根/項目/(example.com/project/some/page/where)/一些/頁/哪裏會重定向到@ frontend.php
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php
我已經達到但是,我希望能夠將部分頁面推送到不同的處理程序,例如(example.com/project/api/page/where,而不是example.com/project/some/api/where) :
RewriteRule ^/api?$ @api.php
問題是,這是行不通的,不管這條規則是高於還是低於另一條。任何人都可以建議我怎麼能做到這一點?
我也曾嘗試:
RewriteRule ^/api(/.*)? @api.php [L]
RewriteCond %{REQUEST_URI} !/api
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php [L]
雖然這工作,因爲http://example.com/project/api/page/where不推送到@ frontend.php,它不會得到它@ api.php,併產生:
[Wed Apr 18 10:46:12 2012] [error] [client 127.0.0.1] File does not exist: /www/project/api
編輯:
我的最新嘗試是:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^api(/.*)? @api.php [L]
RewriteCond %{REQUEST_URI} ^api
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf|swf|doc)$ @frontend.php
與這一個問題是,如果URL與除API /像(example.com/project/test/page/where)任何啓動它拋出錯誤:
[Sat Apr 21 10:50:13 2012] [error] [client 127.0.0.1] File does not exist: C:/xampp/www/projects/frame3/test
這很接近。雖然沒有RewriteBase工作。至此,這就是爲什麼@ frontend.php規則工作得如此之好以至於我不必設置RewriteBase。 – 2012-04-20 21:14:11
我不得不承認,我真的不知道fronted.php之前的標誌是幹什麼的(完成任何事情?)。顯然,你可以有沒有RewriteBase的規則,你只需要寫下相對路徑。爲了讓它沒有RewriteBase,我編輯了我的示例。 – Jan 2012-04-21 06:02:12
謝謝。 @符號除了使文件更加模糊之外別無其他,因此大多數人不會輕描淡寫。它根本沒有URL重寫的目的。如果我想要,我可以使用_,〜或=。 – 2012-04-21 13:34:18