2009-09-09 149 views
0

我正在處理一個url縮寫腳本。 它位於http://mini.ample.se/ 和短URL看起來像http://mini.ample.se/[abc..]重定向問題「沒有指定輸入文件」

.httaccess文件看起來像這樣

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteOptions MaxRedirects=1 
    RewriteBase/
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteRule ^([a-zA-Z0-9_-]+)$ redirect.php?alias=$1 [L] 
</IfModule> 

當我嘗試它與前。 mini.ample.se/a我得到「沒有指定輸入文件」的錯誤。 我知道它與重定向有關,並沒有找到我的redirect.php文件,但我不知道是什麼。

redirect.php文件看起來像這樣

$alias = trim(mysql_real_escape_string($_GET['alias'])); 

if (!preg_match("/^[a-zA-Z0-9_-]+$/", $alias)) { 
    header("Location: ".SITE_URL, true, 301); 
    exit(); 
} 

if (($url = get_url($alias))) { 
    header("Location: $url", true, 301); 
    exit(); 
} 

header("Location: ".SITE_URL, true, 301); 

謝謝!

+0

不應該是'/redirect.php?...'帶有斜槓? – bobince 2009-09-09 14:21:50

+0

我也這麼認爲,但在我的服務器上,我有這個奇怪的問題,它只在沒有引導斜線時才起作用!仍然無法弄清楚爲什麼:S – zanbaldwin 2009-09-09 14:37:34

回答

0

我很確定這是一個'找不到文件'的問題,PHP文件沒有找到,它踢了一個錯誤,我認爲你的重寫需要有一個條件,不會'rewite'一定要求:

RewriteCond $1 !^(redirect\.php) 

$ 1爲正在傳遞.. 只是一個例子,當然價值,但我相信這是發生了什麼。試一試。

編輯: 做了搜索,看起來像這樣可以幫助你: http://jenseng.com/archives/000035.html

0

的mod_rewrite可以記錄大量的調試信息。只是增加了log level和例如設置log file

RewriteLogLevel 9 
RewriteLog logs/rewrite.log 

打印像

(3) [perdir D:/xampp/htdocs/so/rewrite/] strip per-dir prefix: D:/xampp/htdocs/so/rewrite/yadda -> yadda 
(3) [perdir D:/xampp/htdocs/so/rewrite/] applying pattern '^([a-zA-Z0-9_-]+)$' to uri 'yadda' 
(4) [perdir D:/xampp/htdocs/so/rewrite/] RewriteCond: input='D:/xampp/htdocs/so/rewrite/yadda' pattern='!-f' => matched 
(4) [perdir D:/xampp/htdocs/so/rewrite/] RewriteCond: input='D:/xampp/htdocs/so/rewrite/yadda' pattern='!-d' => matched 
(4) [perdir D:/xampp/htdocs/so/rewrite/] RewriteCond: input='D:/xampp/htdocs/so/rewrite/yadda' pattern='!-l' => matched 
(2) [perdir D:/xampp/htdocs/so/rewrite/] rewrite 'yadda' -> 'redirect.php?alias=yadda' 
(3) split uri=redirect.php?alias=yadda -> uri=redirect.php, args=alias=yadda 
(3) [perdir D:/xampp/htdocs/so/rewrite/] add per-dir prefix: redirect.php -> D:/xampp/htdocs/so/rewrite/redirect.php 
(2) [perdir D:/xampp/htdocs/so/rewrite/] trying to replace prefix D:/xampp/htdocs/so/rewrite/ with/
(5) strip matching prefix: D:/xampp/htdocs/so/rewrite/redirect.php -> redirect.php 
(4) add subst prefix: redirect.php -> /redirect.php 
(1) [perdir D:/xampp/htdocs/so/rewrite/] internal redirect with /redirect.php [INTERNAL REDIRECT] 

特別提示:看看日誌中的(1) ... internal redirect行。這是(不完全是)幾乎就像一個新的請求到您的服務器,即/重定向真的意味着http://your-server/redirect.php