重定向问题“未指定输入文件”

时间:2009-09-09 13:57:47

标签: php mod-rewrite url-rewriting

我正在开发一个url shortner脚本。 它位于http://mini.ample.se/ 短网址看起来像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>

当我和ex一起尝试时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);

谢谢!

2 个答案:

答案 0 :(得分:0)

我很确定这是一个'找不到文件'的问题,找不到php文件并且它发回错误,我认为你的重写需要有一个不会“重写”某个请求的条件:

RewriteCond $1 !^(redirect\.php)

$ 1是正在通过的课程的价值.. 只是一个例子,但我相信这是最新发生的事情。试一试。

编辑: 搜索,看起来像这样可以帮助您: http://jenseng.com/archives/000035.html

答案 1 :(得分: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]

ESP。看一下日志中的(1) ... internal redirect行。那个(不完全如此)几乎就像是对您的服务器的新请求,即 / 重定向真的意味着http://your-server/redirect.php