2012-08-26 69 views
0

我在我的智慧'結束...我試圖做一些簡單的事情,但我不明白是什麼問題...PHP和mod_rewrite問題在Plesk

我簡單試圖將所有請求都發送到域,並將它們路由到index.php

編輯清楚起見:index.php充當請求的調度程序,作爲框架的一部分。

我有我的本地機器上這方面的工作沒有問題,但服務器(VPS Linux的使用Plesk)我有各種各樣的問題......

編輯清晰的:這些規則被定義在虛擬主機的vhost.conf配置文件中。

這裏的mod_rewrite的:

<IfModule rewrite_module> 
    RewriteEngine On 
    RewriteRule ^/.* /index.php 
</IfModule> 

下面是Apache的錯誤日誌,當我試圖進入 「www.mydomain.com/home/index」(例如):

[debug] core.c(3072): [client xxx.xxx.xxx.xxx] r->uri = /phppath/cgi_wrapper/phppath/cgi_wrapper/phppath/cgi_wrapper/home/index 
[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /phppath/cgi_wrapper/phppath/cgi_wrapper/home/index 
[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /phppath/cgi_wrapper/home/index 
[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /home/index 

由於您可以從跟蹤中看到,它似乎將/ home/index重定向到/ phppath/cgi_wrapper /,然後它似乎再次傳遞到/ phppath/cgi_wrapper/phppath/cgi_wrapper/home/index,依此類推,直到最大值內部重定向已達到。

將HTTP 500發送到瀏覽器。

進一步編輯 - 額外的信息。從我從Plesk散佈其文件的方式中可以看出,這些是唯一對虛擬主機有影響的兩行。我認爲這可能是Action聲明...我可以用vhost.conf以某種方式覆蓋它嗎?

in php-cgi.conf: 
ScriptAlias /phppath/ "/var/www/cgi-bin/cgi_wrapper/" 
Action php-script /phppath/cgi_wrapper 

in php.conf: 
AddHandler php5-script .php 

進一步編輯:發現這在一個動態生成的conf文件(在虛擬主機級別)。

<Files ~ (\.php)> 
    SetHandler None 
    AddHandler php-script .php 
    Options +ExecCGI 
    allow from all 
</Files> 

有沒有人有任何想法發生了什麼?我一直拉我的頭髮我們兩天...在此先感謝

+0

你爲什麼試圖將所有請求重定向到單個頁面?如果你描述了你想要達到的目標,它會幫助人們提供建議。 – Bobulous

+0

另外,您能告訴我們這些規則是否位於站點公共根目錄中的.htaccess文件中,還是位於適用於整個服務器的httpd.conf文件中? – Bobulous

+0

嗨 - 我試圖將請求路由到單個頁面,因爲該頁面充當調度員。它是框架的一部分。這些規則直接在vhost.conf文件中定義(其中爲每個虛擬主機定義文檔根目錄,服務器名稱等) – GarethL

回答

0

經過多次撕裂的頭髮,咬牙切齒,以及三個鍵盤後...我找到了一些工作。這不是很好,但它可以完成這項工作......如果任何人都可以對此提供任何改進,請做 - 我全力以赴。還是眼睛。原樣。

所以,我首先注意到的是,在Apache日誌,這讓我想重複/phppath/cgi_wrapper/home/index問題:「也許我不應該傳遞/home/index到PHP CGI,但我要傳遞index.php」。所以,我修改了重寫如下:

<IfModule rewrite_module> 
    RewriteEngine On 
    RewriteLog /blah/blah/blah/rewrite_log 
    RewriteLogLevel 5 

    RewriteRule ^.*$ /index.php [PT] 
</IfModule> 

我已經簡單地添加的直通(PT)標誌,它根據文檔通過對處理程序將重寫結果。

這引起了我下面的Apache 是error_log

[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /index.php 
[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /index.php 
[debug] core.c(3078): [client xxx.xxx.xxx.xxx] redirected from r->uri = /index.php 

,我認爲是一個進步,但它仍然是行不通的。

因此,然後我去了我的閃閃發光的rewrite_log看看這是否能照亮我。我看到:

xxx.xxx.xxx.xxx - - [28/Aug/2012:15:38:05 +0400] [www.mydomain.com/sid#7f3c39001360][rid#7f3c390bbc88/initial] (2) rewrite '/' -> '/index.php' 
xxx.xxx.xxx.xxx - - [28/Aug/2012:15:38:05 +0400] [www.mydomain.com/sid#7f3c39001360][rid#7f3c390bbc88/initial] (2) forcing '/index.php' to get passed through to next API URI-to-filename handler 
xxx.xxx.xxx.xxx - - [28/Aug/2012:15:38:05 +0400] [www.mydomain.com/sid#7f3c39001360][rid#7f3c390c2710/initial/redir#1] (2) init rewrite engine with requested uri /phppath/cgi_wrapper/index.php 
xxx.xxx.xxx.xxx - - [28/Aug/2012:15:38:05 +0400] [www.mydomain.com/sid#7f3c39001360][rid#7f3c390c2710/initial/redir#1] (3) applying pattern '^/(.*)$' to uri '/phppath/cgi_wrapper/index.php' 

所以,從這個我推斷,我有同樣的問題:/phppath/cgi_wrapper/index.php現在正在傳遞到重寫引擎再次被改寫了,這是走出來/index.php再次,這是爲傳回來等等等等。

所以我添加了一個條件。 (這看起來醜陋給我的位,我敢肯定有一個更好的方法):

<IfModule rewrite_module> 
    RewriteEngine On 
    RewriteLog /blah/blah/blah/rewrite_log 
    RewriteLogLevel 5 

    RewriteCond ${REQUEST_URI} !^/phppath 
    RewriteRule ^.*$ /index.php [PT] 
</IfModule> 

那的RewriteCond基本上是說:應用以下規則,如果要求不符合/phppath開始。

就是這樣。現在它正在工作;根據需要,所有請求都由index.php處理。