2014-01-14 85 views
0

任何人都可以解釋這個mod_rewrite正則表達式將如何工作?Apache mod_rewrite解釋

<IfModule rewrite_module> 
    RewriteEngine On 
    RewriteRule ^(.*)$ /Symfony/web/app_dev.php [QSA,L] 
</IfModule> 

當我輸入http://localhost/hello/testingonly時,它會被重定向到什麼地方?

編輯:

我目前正在使用Symfony框架和嘗試聯機教程。 http://localhost/Symfony/web/app_dev.php/hello/testingonly實際上會顯示一個頁面,上面寫着「Hello $ name」,在這種情況下$ name是指「只進行測試」。

因此,如果您訪問此頁http://localhost/Symfony/web/app_dev.php/hello/matthew,頁面會顯示「Hi mathew」。

我想要做的下一件事是從URL中刪除Symfony/web/app_dev.php,我複製並粘貼上面的重寫規則,它運行良好。

我想知道的是它是如何解釋哪一個是名稱參數。

如果我要訪問http://localhost/hello/mathew,並根據重寫規則,它應該只是http://localhost/Symfony/web/app_dev.php,參數應該丟失。但是如何設法顯示「Hello mathew」?

+0

對於你不明白的東西,你能否更具體一些? mod_rewrite非常複雜,可以爲不同目的定義各種重寫規則和條件。上面的例子使用regexp將所有使用的apache上下文(dir/host ...)中的所有請求重寫爲'''app_dev.php'''。請參閱[mod_rewrite文檔](http://httpd.apache.org/docs/current/mod/mod_rewrite.html)。 – matthias

+0

@Matthias,抱歉沒有具體。我將編輯我的問題 – user3169403

回答

0

此規則重定向所有內容/Symfony/web/app_dev.php

   ^(.*)$ match everything (start, any char 0~n times, end) 
      /
RewriteRule ^(.*)$ /Symfony/web/app_dev.php [QSA,L] 
              // 
      [QSA] keep GET parameters in the URL/
              /
    [L] mean "if match, does not read next rules" 

當你沒有他[R=301]標誌呢,這個重定向是透明的。

所以:

  • http://localhost/hello/testingonly重定向到: http://localhost/Symfony/web/app_dev.php,但URL保持不變。
  • http://localhost/hello/testingonly?foo=bar重定向到: http://localhost/Symfony/web/app_dev.php?foo=bar,但URL保持不變。
+0

嗨Zessx,感謝您的回覆。我編輯我的問題上面,並根據您的答案如果http:// localhost/hello/testsonly重定向到http://localhost/Symfony/web/app_dev.php,那麼我的參數不會丟失?網頁如何設法顯示「Hello testingonly」? – user3169403