2015-12-21 50 views
0

我有一個名爲quick-mvc的虛擬主機,我在根目錄下有一個.htaccess文件。 我有mod_rewrite.so激活。我知道mod_rewrite是不推薦的,但是現在我正在使用它,並希望得到這個工作。謝謝!

在瀏覽器前.htaccess文件

RewriteEngine on 

RewriteCond %[REQUEST_FILENAME] !-d 
RewriteCond %[REQUEST_FILENAME] !-f 
RewriteCond %[REQUEST_FILENAME] !-l 

RewriteRule ^(.+)$ index.php?url=$1 [L] 

http://quick-mvc/one/two/three/test 

$ _GET [ '網址']返回 「的index.php」

瀏覽器ex 2

http://quick-mvc/index.php/one/two/three/test 

$ _GET [ '網址']返回 「的index.php /一/二/三維/測試」

我想做些什麼accompish 我想返回顯示甚至是否有什麼前2我像ex 1一樣添加index.php。我也想讓index.php不顯示出來。雖然我可以用PHP輕鬆編寫代碼。

+1

你應該看一下重寫模塊的文檔。尤其像'REQUEST_URI'這樣的變量對你來說很有意思,它們允許你更容易地訪問你感興趣的實際請求:http://httpd.apache.org/docs/current/mod/mod_rewrite.html – arkascha

+0

另一件事:我請不要理會爲什麼重寫模塊不應該被推薦爲「......確實是這樣的,如果可能的話,應該避免使用'.htaccess'樣式文件,因爲這些文件出了名的錯誤容易出錯,難以調試和_really_減慢服務器速度因此,如果你有權訪問主機配置,你應該在那裏重寫你的重寫規則 – arkascha

回答

0

您的示例讓我想起了Drupal如何使用url重寫到他們的前端控制器。檢查Drupal 7,他們改變了他們這樣做的方式。

的Drupal 7周的.htaccess(精簡):

RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !=/favicon.ico 
    RewriteRule^index.php [L] 

你可以採取類似的方法,然後在index.php文件:

<?php 
$url = $_SERVER['REQUEST_URI']; 
$parts = parse_url($url); 

PHP函數parse_url應該給你的路徑和查詢字符串。

$your_url = $parts['path']; 

如果放置在網站根目錄,我們訪問這個網址:

http://example.com/foo/bar/baz?bat=qux 

parse_url給出:

array 
    'path' => string '/foo/bar/baz' 
    'query' => string 'bat=qux' 

偷看其他一些框架,看看他們是怎麼做的。

+0

謝謝,這可能是arkascha與REQUEST_URI討論的內容,我看到這個工作非常好,問題仍然是使用索引.php or not。我可以修剪index.php,但這是必要的嗎? –

+0

如果你的規範URL不包含它,你不需要關心或修剪路徑的index.php。 http:// example.com/foo/bar'不是'http://示例。com/index.php/foo/bar' – Progrock

+0

REQUEST_URI和parse_url工作得很好。謝謝 :) –

相關問題