Проблема с mod_rewrite не работает правильно - PullRequest
0 голосов
/ 17 февраля 2011

Я пытаюсь изобразить URL-адреса на веб-сайте, используя mod_rewrite. Но это не похоже на работу. Я хочу следующий URL:

http://mydomain.com/test

Переписать как:

http://mydomain.com/index.php?t=test

Мой файл .htaccess выглядит так:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On  
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?t=$1 [L]
</IfModule>

Но, похоже, это не работает.

mod_rewrite определенно включен, потому что следующее простое правило перенаправляет сайт на example.com:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On  
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ http://example.com/?
</IfModule>

Мой сайт размещен на GoDaddy, если это имеет значение. Сайт также настроен как поддомен основного сайта.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2011

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ main.php

В main.php я вызываю GetSegments (), который даст мне массив вызываемого пути:

function CheckSegmentsEmpty($var) {
    if($var == '') {
        return false;
    }
    else {
        return true;
    }
}

function GetSegments() {
    $path = dirname($_SERVER['SCRIPT_NAME']);
    if($path != '' && $path != '/')
        $segments = str_replace($path, '', $_SERVER['REQUEST_URI']);
    else
        $segments = $_SERVER['REQUEST_URI'];

    if($segments[0] == '/')
        $segments = substr($segments, 1);

    //$segments = strtolower($segments);
    $segments = preg_replace("!\.htm(l|l\?)$!si", '', $segments);

    $segments = explode('/', $segments);
    $segments = array_filter($segments, 'CheckSegmentsEmpty');

    return $segments;
}

Некоторые примеры:

Может быть, эти короткие фрагменты кода также полезны для вашей работы ...

0 голосов
/ 17 февраля 2011

Хорошо, похоже, мне нужно указать полный URL в правиле перезаписи:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On  
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^(.*)$ http://mydomain.com/index.php?t=$1
</IfModule>

Теперь страница отображается правильно.

...