2016-05-16 59 views
1

我希望所有傳入流量都通過PHP腳本傳輸,只需將腳本上傳到服務器並在我的.htaccess中添加幾行即可。是否 - 或者類似 - 可能嗎?基於PHP腳本結果的.htaccess重定向可以嗎?

例如爲:

  1. 我訪問的網頁。
  2. PHP腳本獲取整個URL,並將重定向目標URL返回給.htaccess。
  3. 僅當URL腳本已被PHP腳本修改時,.htaccess纔會重定向。

回答

1

.htaccessPHP腳本之前被解僱。查看.htaccess作爲您的Web服務器(Apache)設置的擴展。您將無法「發送」.htaccess,因爲它是服務器的配置文件,而不是引擎本身。 Conversly你可以使用PHP的原生header redirect

PHP

header('Location: http://www.example.com/'); 
+0

也許我可以讓Apache做一個子請求,這樣一來,它首先會對腳本進行內部重定向,然後根據腳本的返回值(如果需要)進行外部重定向 - 可以存儲在服務器端 - 或環境變量。這是不可能的嗎? –

+0

RewriteMap - 我不太瞭解 - 似乎也很有希望。除了它不能在.htaccess上下文中使用的事實。 –

+0

這個也很有趣,我會詳細閱讀它:_%{LA-F:variable}可以用來執行一個內部的(基於文件名的)子請求,以確定變量的最終值。大多數情況下,這與上面的LA-U相同。(來源:[httpd.apache.org](http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond)) –

2

非常類似的東西可以使用Apache的mod_rewrite更傳統的規則來完成。或者正如你在對話中注意到@ Zak的回答可能使用了內部重定向。

下面是一個例子的序列:

  1. 用戶訪問網頁(例如http://myhost.com/my_area/my_file.jpg
  2. .htaccess被配置爲使所有請求/myarea(甚至/)的PHP腳本。 (例如handle-url.php)(Example code
  3. handle-url.php邏輯現在可以做任何的幾件事情:
    1. 返回錯誤
    2. 使用的header("Location: URL)方法將用戶重定向到任何URL作爲由@Zak提及(例如http://myhost.com/file_area/my_file.jpg
    3. 直接從磁盤讀取文件並將數據返回給用戶。 (Example code

看看在mod_rewrite先進示範頁面。根據你需要做什麼,可能有其他選擇。

例如,On-the-fly Content-Regeneration可能會有所幫助。如可能FallbackResource

+1

我需要一個解決方案,其中Apache使最後的重定向,而不是PHP。我有很多現有的RewriteRules,我不想用PHP實現。 (我想添加的新邏輯對於Apache來說太複雜了,所以在這種情況下我需要PHP。) –

+0

hmm。請參閱:http://stackoverflow.com/a/1390754/6287702有可能這樣的虛擬重定向(即缺少ptoto +主機)可以通過mod_rewite觸發子請求。目前無法測試此功能。最糟糕的情況下,你可以代理你的PHP腳本的後面,並通過答覆。但是越來越醜陋了。 – Wafflecode