【问题标题】:redirect problem "No input file specified"重定向问题“未指定输入文件”
【发布时间】:2009-10-31 09:00:00
【问题描述】:

我正在编写一个 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>

当我与 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);

谢谢!

【问题讨论】:

  • 不应该是/redirect.php?...加上斜杠吗?
  • 我也是这么认为的,但是在我的服务器上,我遇到了一个奇怪的问题,即它只有在没有前导斜杠的情况下才能工作!仍然无法弄清楚为什么:S

标签: php mod-rewrite url-rewriting


【解决方案1】:

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

RewriteCond $1 !^(redirect\.php)

$1 是当然被传递的值.. 只是一个例子,但我相信这就是正在发生的事情。试一试。

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

【讨论】:

    【解决方案2】:

    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 行。这(不完全是)几乎就像对您的服务器的新请求,即 /redirect 真的意味着 http://your-server/redirect.php

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 2013-01-11
      • 1970-01-01
      • 2017-07-24
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多