2012-04-22 51 views

回答

3

考慮重寫僅不存在的路徑,例如如果文件或目錄存在 - 不要重寫它。

WordPress使用這個重寫他們的永久鏈接,我認爲這是非常好的例子:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

正如你可以看到他們有重寫條件,排除現有的文件/目錄。

0

.htaccess文件重定向任何不包括/index.php。 考慮重寫它只捕捉確實需要的路徑。

或者,你可以用表示爲「最後」(L)規則啓動文件:

RewriteRule ^/javascript.js$ $0 [L] 

這將迫使阿帕奇評估這種重寫規則,然後暫停該請求所有其他規則。因此,您的.js.css文件將得到正確處理,但是您必須爲每個此類文件在.htaccess中創建一個新條目。我會強烈建議我對這一個第一個建議。

0

嘗試這種情況:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^([^/]*)$ index.php/?node=$1 [L] 
+0

謝謝,這看起來就像是我需要什麼,我也試過,但它返回一個404沒有找到,不過我已經使用RewriteEngine敘述在 的RewriteCond%{REQUEST_FILENAME} -f 的RewriteCond%{REQUEST_FILENAME}! - d RewriteRule ^([^ /] *)$ index.php /?node = $ 1 [L] 它似乎工作。 – 2012-04-22 23:28:14

6

我一直在到處尋找一個簡單的解決方案,它不會讓我硬編碼爲我所有的相對路徑,像IMGS,CSS,JavaScript的baselinks ...

所以這裏有雲,之間添加此<head>標籤您有問題的網頁:

<base href='http://www.mydomain.com/'>

這將使你的相對路徑鏈接將與此基礎鏈路啓動。就那麼簡單。

<base>標記指定文檔中所有相對URL的基本URL /目標。將<base>標記作爲<head>元素中的第一個元素,以便頭部分中的其他元素使用<base>元素中的信息。

它適合你嗎?