2015-04-29 50 views
1

我知道public in URL有很多匹配,但是我想要一個解釋。解釋:Apache Rewrite,公開於URL

Apache配置:

<VirtualHost *:80> 
    ServerName localhost 

    ServerAdmin [email protected] 
    DocumentRoot /sites/MVC/public 

    <Directory /sites/MVC> 
      Options +FollowSymLinks +MultiViews 
      AllowOverride All 
      Require all granted 
    </Directory> 

    #LogLevel info ssl:warn 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

公共/ htaccess的:

Options -MultiViews -Indexes 
RewriteEngine On 

RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.*) /index.php?url=$1 [QSA,L] 

基本上當我嘗試print_r()接收到的URL,它打印公共作爲數組的第一個元素。該URL http://127.0.0.1:8080/this/that將產生這樣的輸出:

Array ([0] => public [1] => this [2] => that) 
爲什麼公共包含在URL時,未明確表明

編輯

附:對於任何人想知道; 127.0.0.0.1:8080解析爲端口80的原因是因爲它是通過由Vagrant管理的VM託管的。

index.php創建了一個App的實例,該實例分解了URL。

App.php:

class App { 

    // Defaults. This will default the app to home/index with 0 parameters 
    protected $controller = "home"; 
    protected $method = "index"; 
    protected $params = []; 


    public function __construct() { 
     print_r($this->parseUrl()); 
    } 

    private function parseUrl() { 
     if(isset($_GET['url'])) { 
      return $url=explode('/', filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL)); 
     } 
    } 
} 
+0

您將需要查看'index.php'並按照如何分解url。該htaccess將把'http://127.0.0.1:8080/this/that'變成'http://127.0.0.1:8080/index.php?url = this/that'。 'index.php'中的某些內容將使用變量'$ url'並將其分割成一個數組。 – Styphon

+0

@Styphon我已經包含了分解URL的代碼,也許你看到了我錯過的東西。 – Warosaurus

+0

如果你print_r($ _ GET ['url']);'? – Styphon

回答

0

我有.htaccess文件中的錯誤的目錄,它應該是在public/目錄,而不是應用程序本身的/根目錄。非常初級的錯誤我知道..

我希望這可以幫助任何人做出這樣一個簡單的錯誤。