2009-09-09 170 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