2013-12-19 36 views
0

我真的很糾結於重寫規則的語法。我希望你能幫忙。在使用RewriteRule語法和配置時遇到問題,具有挑戰性

我使用了一個節點包模塊來創建一堆超級ajaxy站點的html快照。該模塊在命名爲URL的指令中輸出快照,以供稍後與escape_fragment重寫規則一起使用。所以exampledomain.net/a45.php?lang=eng輸出爲./snapshots/a45.php?lang=eng/index.html。因此,要進入該目錄,我必須跳過特殊字符。

我試圖重寫http://testdomain.net/a45.php?lang=enghttp://testdomain.net/snapshots/a45.php?lang=eng/index.html,我無法讓我的重寫規則正常工作。

這裏是我試過的語法:子目錄

Options +FollowSymLinks 
RewriteEngine On 
ReWriteBase /var/www/vhosts/testdomain.net/httpdocs/secure/clients/amg/3dot0 
RewriteRule ^a45\.php?lang=eng$ /snapshots/a45.php?lang=eng/index.html 

我也有和無RewriteBase試過 在.htaccess文件。 我也嘗試了上面的第二個url轉義和第一個url上的幾個不同的字符ALL ... OH和我一定會啓用Allowoverride all在整個httpdocs目錄以及主要的vhost.conf文件 - 我知道該指令正在工作,因爲Options + Indexes允許我瀏覽整個樹中的目錄。

任何建議或線索都非常感謝!

回答

1
  1. 目錄名稱包括字符? = /不會被喜歡。儘量避免它們。

  2. 重寫的目的是從其他地方運行另一個頁面,而不是將某些內容轉儲到新目錄中。那是你想要做什麼?您要告訴服務器,而不是在/snapshots/a45.php?lang=eng/目錄中運行index.html。

  3. RewriteRule無論如何不會看到查詢字符串(?lang = eng)。這個?告訴它p是可選的。

+0

OH!我想你必須在這裏使用{QUERY_STRING}。嗯更多閱讀.. – funkenstein

+0

類似RewriteCond%{QUERY_STRING} ^(\ w +)=(\ w +)$ RewriteRule ^/path/path /%1 /%2? – funkenstein

+0

您可以查看QUERY STRING中的內容,甚至可以從RewriteCond中獲取它,但要注意使用奇怪字符的任何可能會混淆服務器操作系統的內容,例如?,&,=,/。你究竟想在這裏做什麼?你打算根據QS中的內容運行特定的index.html,還是試圖將某些內容轉儲到新目錄中? –