mod_rewrite无法正常工作的问题

时间:2011-02-17 06:47:52

标签: php apache mod-rewrite friendly-url

我正在尝试使用mod_rewrite在网站上刷新网址。但它似乎没有奏效。我想要以下网址:

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 :(得分:0)

好的,看起来我需要在重写规则中指定完整的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>

现在可以正确显示页面。

答案 1 :(得分:0)

我使用这个片段来获取路径的所有内容,除了一些不应该解析的资源文件:

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;
}

一些例子:

  • http://www.domain.tld - &gt;阵列()
  • http://www.domain.tld/test.html - &gt;阵列( '测试')
  • http://www.domain.tld/test - &gt;阵列( '测试')
  • http://www.domain.tld/a/b/c/d/e.xyz - &gt;数组('a','b','c','d','e.xyz')

也许这段简短的代码片段对您的工作也很有用......