2014-02-13 35 views
4

我有一個非常簡單的RewriteRule,但我不明白爲什麼它不想工作。也許它只是疲憊的說話,但有些似乎不可思議。爲什麼這個RewriteRule與[R]一起使用,但不與[QSA,L]一起使用?

我想將看起來像http://mydomain.com/abc的網址重定向到http://mydomain.com/abc/index.php/xyz,但我不希望URL更改。

這是我的全部的.htaccess:「沒有指定輸入文件」

RewriteEngine On 
RewriteBase /abc/ 

#redirect the homepage 
RewriteRule ^$ index.php/msj [QSA,L] 

當我這樣做,我得到。如果我將[QSA,L]更改爲[R],它會起作用,但它實際上會重定向URL。

我誤解了什麼?

編輯:爲$ _ SERVER

array(34) { [ 
"PATH"]=> string(29) "/bin:/usr/bin:/sbin:/usr/sbin" [ 
"RAILS_ENV"]=> string(10) "production" [ 
"FCGI_ROLE"]=> string(9) "RESPONDER" [ 
"UNIQUE_ID"]=> string(24) "UxDcvK3suH0AABgWvXUAAAAj" [ 
"SCRIPT_URL"]=> string(1) "/" [ 
"SCRIPT_URI"]=> string(22) "http://themspress.org/" [ 
"dsid"]=> string(8) "25793844" [ 
"ds_id_25793844"]=> string(0) "" [ 
"DH_USER"]=> string(13) "juancommander" [ 
"HTTP_HOST"]=> string(14) "themspress.org" [ 
"HTTP_CONNECTION"]=> string(5) "close" [ 
"HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" [ 
"HTTP_USER_AGENT"]=> string(120) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36" [ 
"HTTP_ACCEPT_ENCODING"]=> string(17) "gzip,deflate,sdch" [ 
"HTTP_ACCEPT_LANGUAGE"]=> string(23) "en-US,en;q=0.8,es;q=0.6" [ 
"HTTP_COOKIE"]=> string(190) "OJSSID=Siy7xdofJurGtBcNUk1880; __utma=154159997.1153519437.1393351515.1393522373.1393598726.4; __utmc=154159997; __utmz=154159997.1393351515.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" [ 
"SERVER_SIGNATURE"]=> string(0) "" [ 
"SERVER_SOFTWARE"]=> string(6) "Apache" [ 
"SERVER_NAME"]=> string(14) "themspress.org" [ 
"SERVER_ADDR"]=> string(15) "173.236.187.201" [ 
"SERVER_PORT"]=> string(2) "80" [ 
"REMOTE_ADDR"]=> string(14) "189.138.120.63" [ 
"DOCUMENT_ROOT"]=> string(51) "/home/juancommander/themspress.org/var/www/html/ojs" [ 
"SERVER_ADMIN"]=> string(24) "[email protected]" [ 
"SCRIPT_FILENAME"]=> string(61) "/home/juancommander/themspress.org/var/www/html/ojs/index.php" [ 
"REMOTE_PORT"]=> string(5) "53719" [ 
"GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" [ 
"SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" [ 
"REQUEST_METHOD"]=> string(3) "GET" [ 
"QUERY_STRING"]=> string(0) "" [ 
"REQUEST_URI"]=> string(1) "/" [ 
"SCRIPT_NAME"]=> string(10) "/index.php" [ 
"PHP_SELF"]=> string(10) "/index.php" [ 
"REQUEST_TIME"]=> int(1393614012) } 
+0

這是CI還是其他一些框架? – anubhava

+0

其開放期刊系統。它使用PHP。我實際上有另一個安裝在另一臺服務器上有相同的設置(雖然,顯然不完全相同),並在那裏工作... – pocketfullofcheese

+0

是abc一個真正的目錄?你的htaccess文件位於哪個目錄? –

回答

1

我在Dreamhost documentation找到了問題的根源。

看來:

FastCGI的版本似乎在與Apache 2.2的配對不喜歡 的重寫規則的index.php/$ 1相反,它更喜歡index.php?$ 1,但一些 CMS不喜歡那樣。

我使用的CMS不喜歡那樣。所以撤消的評論使用?1美元是在正確的軌道上,但因爲我沒有解釋,並且我使用的CMS(開放式期刊系統)在?之後不能與pathinfo內容一起工作,所以它只是不起作用。

解決方案是從FastCGI更改爲常規CGI。

0

輸出這裏發生了什麼:

你爲http://mydomain.com/abc發送請求。 Apache的mod_rewrite將URL重寫爲http://mydomain.com/abc/index.php/msj,但保留了第一個URI。所以當Apache要求php來處理請求時,$_SERVER['REQUEST_URI']將是/abc/而不是/abc/index.php/msj並且由於您的php應用程序(OJS)使用$_SERVER['REQUEST_URI']來處理請求,因此它不會知道應用於您的URL的重寫。當您將[QSA,L]替換爲[R]時,apache會將Location標題發送到您的瀏覽器。您的瀏覽器發送另一個實際更改$_SERVER['REQUEST_URI']的請求。

不幸的是,我沒有辦法,我知道重寫該部分。


更新:在你的.htaccess文件 將這個並檢查它是否有效與否?

AcceptPathInfo On 

絕招

.htaccess文件將這個:

RewriteRule ^$ index.php?undone=/msj [QSA,L] 

編輯您的index.php文件,並把這個在第一個開始:

if(isset($_GET['undone'])){ 
     $_SERVER['REQUEST_URI'] = '/abc/index.php' . $_GET['undone']; 
     unset($_GET['undone']); 

    } 
+0

好的,這是一個好的開始。但我有這完全相同的重寫規則在另一臺服務器上,並且工作...沒有建議如何解決? – pocketfullofcheese

+0

@pocketfullofcheese另一臺服務器?那是nginx嗎? – undone

+0

你是什麼意思,多餘?兩者都是apache。 – pocketfullofcheese

相關問題