我正在开发一个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);
谢谢!
答案 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