2009-08-07 183 views
0

我的.htaccess看起來是這樣的:htaccess的重定向問題

RewriteEngine on 
RewriteCond %{REQUEST_URI} !(\.gif)|(\.jpg)|(\.png)|(\.css)|(\.js)|(\.php)|(\.swf)|(\.xpi)|(\.ico)|(\.src)$ 
RewriteCond %{REQUEST_URI} ^(.*)$ 
#RewriteCond %{REQUEST_FILENAME} ! -f 

RewriteRule (.*)$ view.php?picid=$1 [L] 

問題是,當我訪問www.example.com,它送我去view.php。我的根目錄中有一個index.php文件。我如何讓.htaccess忽略索引文件?

回答

1

試試這個規則:

RewriteCond %{REQUEST_URI} !.*\.(gif|jpg|png|css|js|php|swf|xpi|ico|src)$ [OR] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.+) view.php?picid=$1 [L] 

的重大變化 - 我做:

  • 正則表達式在你的第一個RewriteCond故障。 $錨點僅適用於更改中的最後一個選項。
  • 第二個RewriteCond指令沒用。
  • 被註釋掉的第三個RewriteCond只會做你想做的事情:檢查請求的URI路徑是否可以映射到現有的文件。
  • 的量詞從零或更多更改爲一個或多個個字符。當請求/時,這將排除空的URI路徑。
+0

works great , 謝謝。 – mrpatg 2009-08-08 06:23:45

1

從第四行中刪除#並刪除感嘆號之間的空間(!)和-f

RewriteCond %{REQUEST_FILENAME} !-f 

該行表示,如果文件不存在於服務器上,在這情況下,index.php,然後繼續並進行下面的重寫。

同時檢查你是否有DirectoryIndex以及檢查任何有效的目錄。

DirectoryIndex index.php 

RewriteCond %{REQUEST_FILENAME} !-d 

這會使你這個清潔版本:

DirectoryIndex index.php 

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*)$ view.php?picid=$1 [L] 

這首先設置index.php作爲默認文件。然後運行重寫引擎,並且如果請求的文件不是以文件或目錄的形式存在於服務器上,則會將其傳遞到view.php文件並運行它的魔法。

+0

我改變了它,但沒有效果。我嘗試添加一個if(isset($ picid){} else {header('Location:http://website.com');}但它仍然顯示錯誤 – mrpatg 2009-08-07 05:02:03

+1

您嘗試將php添加到.htaccess文件中嗎? – mpen 2009-08-07 05:11:04