2010-07-14 72 views
0

我正嘗試使用mod_rewrite將站點URL中的域重定向到php腳本。例如:使用mod_write將URL中的域重定向到php腳本

http://example.com/http://somedomain.com 

應該重定向到:

http://example.com/test.php?domain=http://somedomain.com 

我曾嘗試用以下重寫規則

RewriteEngine On 
RewriteRule ^(.*)$ /test.php?domain=$1 [L] 

要做到這一點,但我有沒有運氣。有誰知道正確的RewriteRule使用還是有更好的方法來完成這個?

感謝

+0

而不是會發生什麼? (我很確定Apache會在你發送一個格式錯誤的URL之前發瘋,但它甚至可能已經注意到了這個問題) – 2010-07-14 13:18:12

+0

我甚至都沒有想到這一點。我在查看downforeveryoneorjustme.com如何將查詢的URL保存在地址中。這可能與Apache或這樣做會讓它發瘋嗎?! – diarmuid 2010-07-14 13:51:29

回答

0

這是可能做到這一點,但只有當RewriteRule每個服務器背景下,這意味着你必須能夠編輯配置您VirtualHost或服務器中指定一般(httpd.conf)。在這種情況下,您擁有的規則可以正常工作。

定義.htaccess中的規則不起作用,因爲這發生在Apache請求處理的修復階段,也就是在Apache嘗試將請求映射到文件系統之後(並且因此Apache錯誤退出請求之後)。如果您無法訪問必要的配置文件,最明顯的解決方法就是不會將http://方案作爲URL的一部分。

你的規則將仍然有效,但由於如何mod_rewrite作品在每個目錄下,你應該調理它,以及防止重定向循環(L和明確的捕獲組也沒有必要):

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ /test.php?domain=$0 

至於downforeveryoneorjustme.com去,這是谷歌前端服務器,這是據報道,阿帕奇的修改版本上運行(雖然我沒有做很多檢查到這一點我自己),所以我想他們已經走了與第一選項,或者有一些完全不同的系統;我不確定。

0

剛剛計算出來(一個月後!),並決定分享,這可能會幫助別人。

使用以下.htaccess文件將所有請求重定向到index.php文件(或任何你想要的地方)。

<IfModule mod_rewrite.c> 

#Checks to see if the user is attempting to access a valid file, 
#such as an image or css document, if this isn't true it sends the 
#request to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L] 

</IfModule> 

現在我們可以使用$ _SERVER ['REQUEST_URI']來獲取請求的URI。

例如,如果請求的URL是http://example.com/http://google.com,$ _ SERVER [ 'REQUEST_URI']將被設置爲 'http://google.com'