2011-02-17 112 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')

也許這短代碼片段也是有用的爲您的工作...

相關問題