2014-03-30 77 views
1

我正確修改我的.htaccess文件有問題。 目標是在我的服務器上實現一個Web服務來處理Apple的passkit請求。.htaccess重定向爲Web服務失敗,錯誤:太多重定向發生

這工作完美..差不多。因爲我的意圖是,當用戶輸入時:www.domain.com,他應該被導向www.domain.com/index.php。這將是通常的index.php,我希望他在訪問我的網站時看到。

當Apples Server試圖向我的Web服務發送請求時,它們應該被重定向到子文件夾/server/index.php。這工作得很好,當調用www.domain.com 但調用任何不同的URL,這應該被重定向的時候,我得到一個錯誤: 「重定向過多發生。」

我預計重定向/服務器/ index.php

如何正確修改我的配置文件? 我配置文件,如下所示:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # If file with specified name does not exist, procede to rewrite rule below 
    RewriteCond %{REQUEST_FILENAME} !-f 

    # if request = root 
    RewriteRule ^/?$ /index.php 
    # else 
    RewriteRule !^/?(index\.php)$ www.medifaktor.de/server/index.php [R=301] 

    # Check for HTTP Header Authorization and if so, import it as a server environment variable into PHP 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] [L] 
</IfModule> 

回答

2

你的第二個規則是錯誤的,因爲它是檢查不等於/index.php並重定向到/server/index.php

試試這個代碼:

RewriteEngine On 

# If file with specified name does not exist, procede to rewrite rule below 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
# if request = root 
RewriteRule ^/?$ /index.php 
# else 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !^/?(server/index\.php)$ /server/index.php [NC,L] 

# Check for HTTP Header Authorization and if so, import it as a server environment variable into PHP 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] [L] 
+1

謝謝!工作非常好! – konturgestaltung

+0

不客氣,很高興它解決了。 – anubhava

+0

還有一件事... – konturgestaltung

0

謝謝anubhava!我只是嘗試了你的建議,它工作正常。但現在有趣的事情正在發生。爲了測試與物理上不存在的組件的URL將被重定向correcty,我試過如下:

<?php 

require_once("lib.php"); 

// get the request parameters out of the request URL 
$requestURL = (($_SERVER['REDIRECT_URL'] != "") ? $_SERVER['REDIRECT_URL'] : $_SERVER['REQUEST_URI']); 
$scriptPath = dirname($_SERVER['PHP_SELF']); 
$requestURL = str_replace($scriptPath,"",$requestURL); 
$requestParts = explode("/", $requestURL); 
echo $requestURL; 

這應該輸出由我的web服務請求,並應分裂的URL的組成部分進入其組件。但是,無論我嘗試的URL如何:我總是得到結果:/index.php

但是應該使用我認爲會顯示的URL請求的組件?

+1

我相信你應該使用'$ _SERVER ['REDIRECT_URI']來獲取原始URI。 – anubhava

+0

Aaaaaand再次感謝! :)太棒了! – konturgestaltung

+0

非常歡迎。 – anubhava

0

我想,我剛剛得到了意外答案: 通過在代碼中將REDIRECT_URL切換到REQUEST_URI,我得到了正確的輸出。