2009-09-09 6 views
0

Я работаю над сценарием url shortner. Он расположен в 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

+0

Я тоже так думал, но на моем сервере у меня была эта странная проблема, только работая, когда не было ни одной косой черты! Все еще не могу понять, почему: S – zanbaldwin

ответ

0

Я уверен, что проблема с файлом не найдена, что файл php не найден и его ошибка назад, я думаю, что у вашего переписывания должно быть условие, которое не будет «переписывать» определенную запрос:

RewriteCond $1 !^(redirect\.php) 

$ 1 является значением, конечно, что передается .. только пример, но я считаю, что это случается. Попробуйте.

EDIT: ли поиск, похоже, это может помочь вам: 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] 

Esp. взгляните на строку (1) ... internal redirect в вашем журнале. Это (не совсем так) почти как новый запрос на ваш сервер, т. Е. / перенаправление действительно означает http://your-server/redirect.php

Смежные вопросы