2013-10-08 34 views
2

我有一個.htaccess文件,可以執行多個重寫命令並且運行良好。然而,在測試時,我遺漏了一個關鍵信息,在$ _SERVER變量中設置了id(我在php腳本中使用了$ _SERVER)。用mod_rewrite設置一個服務器變量,以及重定向

我有一個URL example.com/f/847f34c76f64cad96effc8e9c3cea176其中長字符串代表一個id和f代表處理請求的腳本。

我有以下重寫,它處理腳本部分。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteCond %{REQUEST_URI} !=/robots.txt 
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC] 
RewriteRule^/scriptf.php [L] 

就像我說的,這會正確處理重定向。但是,我也需要把id放在一個環境變量中。像這樣的東西是我在想的

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteCond %{REQUEST_URI} !=/robots.txt 
RewriteCond %{REQUEST_URI} ^/f/(.*)$ [NC] 
RewriteRule^- [E=id:$1] 
RewriteRule^/scriptf.php [L] 

但可惜這不起作用。

此外,在查詢中發送ID不是我的案例的有效解決方案。

編輯:參考錯誤日誌輸出:

[Tue Oct 08 10:48:31 2013] [error] [client 192.168.77.53] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. 
+0

看起來你是在正確的軌道上,但你需要在你的ENV行使用'%1'而不是'$ 1',因爲你從'RewriteCond'匹配它。 –

+0

我確實將其更改爲%1,但仍然收到500錯誤 –

+0

查看錯誤日誌。你會發現500錯誤實際上是什麼。 –

回答

1

如果你想id$_GET['id']可用,你的代碼改成這樣:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^f/(.+)$ /scriptf.php?id=$1 [L,QSA,NC] 

否則如果你想id將在$_SERVER陣列中可用,請將您的代碼更改爲:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^f/(.+)$ /scriptf.php [L,NC,E=ID:$1] 

然後你可以用下面的變量中PHP:

$_SERVER["REDIRECT_ID"] 
+1

」_另外,在查詢中發送id不是我的案例的有效解決方案。「 –

+0

@MichaelBerkowski:但是沒有寫入:」我遺漏了一條關鍵信息,將id設置在$ _SERVER變量中' – anubhava

+0

我還提供了一個備用規則來使'id'可以作爲PATH_INFO(在適合OP的情況下更好) – anubhava

相關問題