2012-12-16 52 views
4

解決:

遺憾的是,該解決方案是不令人滿意的。今天早上,在試用@ Wige的建議時,我驚奇地發現,期望值事實上發送到頁面,作爲GET查詢。顯然,我認識的人過去幾週一直在改變他們的環境,在幕後做了一些奇蹟般地解決了我的問題的場景,現在我以前的非工作代碼按照最初的預期工作。我htaccess的重寫規則適用於本地主機/ mysite的,但不是在mysite.com在1&1共享主機


新信息:本阿帕奇版的生產服務器是在我的本地主機1.3.34 VS 2.2.21

我很難弄清楚爲什麼我的RewriteRule在生產中不能正常工作。

RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L]

在我的本地測試環境(localhost/mysite/page/pretty-url/{...}),它工作正常,但mysite.com/page/pretty-url/{...}它不能正常工作。它如預期加載page.php,但顯然?query=$1一塊被忽略($_GET爲空)

我想象這個問題在某種程度上與服務器配置有關。我正在使用不帶httpd.conf訪問的共享主機帳戶。


RewriteRule能做什麼(或應該做):

我要像

* example.com/page/pretty-url/{{info_for_dynamic_content}}

的URL改寫爲

* /page.php?query={{info_for_dynamic_content}}

所以我可以在php$_GET['query']


全面進入info_for_dynamic_content

。參考htaccess文件:

AddHandler x-mapp-php6 .php 

DirectoryIndex index.php 
ErrorDocument 404 /index.php 

Options +FollowSymLinks 

# per @Jacques Chester's suggestion 
Options -MultiViews 

RewriteEngine on 
RewriteBase/

# the rule in question 
RewriteRule ^page/pretty-url/(.*)$ page.php?query=$1 [L] 

RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule (.*) /index.php [L] 
+0

什麼版本的Apache在你的localhost vs 1&1上運行? –

+1

如果它在你的本地主機上運行,​​根據你的回答,這個問題不能是mod改寫的條件或規則,因爲**它們工作。看來你已經解決了所有問題。那麼,什麼是問題,找出你的規則爲什麼不能在你的網站工作?如果是這樣,我想你應該專門提出這個問題,明確它與你的規則無關,因爲它們工作正常。我認爲這是'網站管理員'的問題。這只是我的看法,但我希望以任何方式有用。 – PDR

+0

你說得很好。在添加賞金之前,我幾乎將此重寫爲「可能會阻止在另一臺服務器上工作的RewriteRule。」 - 或者更類似這樣的東西。我不認爲我有代表遷移問題 - 但我認爲你也可能是對的。 –

回答

0

似乎被連接到1 & 1的託管環境。

See this question,特別是this answer

基本上看起來1啓用「MultiViews」。通過添加

Options -MultiViews 

您禁用該設置爲您的網站,並根據各種報告,這解決了問題。

+0

I昨天晚上很快試了一下,似乎沒有解決我的問題......但我只有幾分鐘的時間來玩它,直到今天晚些時候才能夠攻擊它。 –

+0

是啊,不能使這項工作... –

+0

呃... ... drat:/ –

1

很可能,您的主機將變量存儲在其他地方。我會添加一個對phpinfo()的調用;插入到腳本中,並通過那裏的環境變量來查看是否可以找到應該得到的值。

+0

在這裏,有一些觀點,大聲笑1&1顯然解決了我的問題,但他們肯定,因爲heck沒有開始我的賞金。太局部化了。 –

相關問題