2011-02-17 145 views
0

我正在尝试使用mod_rewrite在网站上查找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托管,如果有差别。该网站也被设置为主网站的子域名。

+0

解释你是什么意思的`但它似乎并没有工作。“实际发生了什么? – 2011-02-17 06:52:29

+0

如果你把这些`RewriteConds`拿出来怎么办?他们有必要吗? – sdleihssirhc 2011-02-17 06:53:04

+0

RewriteConds是必要的,在这种情况下,它不会重写现有文件/文件夹 – soju 2011-02-17 07:54:39

回答

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> 

它现在可以正确显示页面。

0

我用这个片段来获取路径的一切,除了这should'nt解析一些资源文件:

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 - >阵列()
  • HTTP://www.domain.tld/test.html - >阵列( '试验')
  • HTTP://www.domain.tld/test - >阵列( '试验')
  • HTTP ://www.domain.tld/a/b/c/d/e.xyz - > array('a','b','c','d','e.xyz')

也许这短代码片段也是有用的为您的工作...