2010-01-06 103 views
1

的地址欄中顯示的規則,我有以下重寫規則:除非URI與media/在這種情況下,將改寫URI來project/media/*開始重寫瀏覽器

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    # Route all URLs to dispatch.php. 
    RewriteCond %{REQUEST_URI} !media/ 
    RewriteRule ^(.*)$ dispatch.php [L] 

    #Route requests to /media/* to /project/media/* 
    RewriteRule ^media/(.*)?$ project/media/$1 [L] 

</IfModule> 

一切改寫爲dispatch.php。一切工作正常,如果我導航到example.com/media/css/style.css它所服務的樣式表。如果我導航到example.com/media/css/則發送403 Forbidden錯誤。完善!

然而,如果我導航到example.com/media/css(缺少尾隨「/」)然後在位置欄中的URL改寫爲example.com/project/media/css和所述請求由dispatch.php處理。我如何阻止這種行爲發生?我希望能夠通過dispatch.php來處理,但不會將projects/添加到網址中。

已解決:問題是由於mod_dir重定向了沒有結尾斜槓的URL。這導致出現在磁盤上的位置用於重定向,這意味着子文件夾(項目)被附加到URI。我用最後的.htaccess如下:

Options +FollowSymLinks +MultiViews -Indexes 
Options -Indexes 

<IfModule mod_dir.c> 
    DirectorySlash Off 
</IfModule> 

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase/

    #Add trailing slashes 
    RewriteCond %{REQUEST_URI} !(.*)/$ 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ $1/ [R=301,L] 

    #Route requests to /media/* to /project/media/* 
    RewriteRule ^media(/.*)$ project/media$1 [L] 

    # Route all URLs to dispatch.php. 
    RewriteCond %{REQUEST_URI} !^media/(.*) 
    RewriteRule ^(.*)$ dispatch.php [L] 

</IfModule> 

新的.htaccess不會像以前一樣還有:

  • 禁用mod_dir。
  • 通過使用RewriteRule將尾部斜線添加到URI 。
+1

無需創建一個新的問題: http://stackoverflow.com/questions/2010249/redirecting-media-to-project-media-and-everything-else-to-dispatch-php – 2010-01-06 10:05:35

+0

我會確保我不會再這樣做,但我認爲目標完全不同於需要它自己的問題。 – 2010-01-06 14:31:06

回答