2012-05-13 149 views
1

我想寫我的網址與字符串的格式如下: http://www.mysite.com/news/2012/10/04/article-title 但是當我在htaccess文件的網站樣式使用重寫規則不正常工作。我有這個問題:什麼是最好的方式來做到這一點在PHP? 以前我在asp.net白色重寫模塊中這樣做,但現在我不能這樣做,我已經搜索了很多次,閱讀了很多文章,但仍然有這個問題.... 非常感謝寫乾淨的URL在PHP

回答

3

使用一個入口點(可能是最好的,如果它帶有特定擴展名結尾檢查完成)包含所需地址的GET變量。現在,您可以決定如何在PHP中進行路由(使用includes),其中控制更容易。此外,您應該使用絕對路徑指向您的樣式,或者使用PHP變量來包含樣式的絕對路徑。

以上.htaccess確保如果文件存在,它不會重寫URL。 (2-3行)。

+0

當我使用這個htaccess代碼時,首先我的樣式工作正常,但是當我去其他網址的時候,例如:www.mysite.com/test/我的樣式不見了,我嘗試了css路徑,在這種情況下,我將css路徑更改爲:href =「../ css/main.css」,我的風格正常工作! –

+0

如何定義一個變量來修復我的CSS和JS路徑? –

+0

我使用這段代碼解決了這個問題:define('ROOT_DIR',dirname(__ FILE__)); \t define('ROOT_URL',substr($ _ SERVER ['PHP_SELF'],0, - (strlen($ _ SERVER ['SCRIPT_FILENAME']) - strlen(ROOT_DIR)))); –

2

就個人而言,我使用絕對路徑(或至少相對於根)在我的樣式表和腳本時,把:

<link rel="stylesheet" href="/css/styles.css" /> 

如果不爲你工作,那麼你可能重寫你的CSS路徑,以及。

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

這樣,所有的請求都將被路由到索引頁,具有:根據需要排除的文件

+0

好點 - 相對於根有很大幫助。我通常將樣式/ JS文件/圖像保存在「數據」文件夾中,這樣我就可以將其排除在任何重寫之外。似乎比排除某些擴展更容易,因爲您可以將任何不想重寫的內容(包括PHP和HTML)放在數據文件夾中。 –

+0

我可以這樣做嗎?例如,我可以將我的CSS,js,img文件保存到額外的文件夾中,並從重寫中排除該文件夾,但是如何? –

0

如果您的規則設置正確,但之後您的CSS格式不見了,這意味着您的CSS文件的相對路徑現在不正確。

你可能會使用這樣的事情現在:

<link rel="stylesheet" href="css/styles.css" /> 

更改它以這樣的:

<link rel="stylesheet" href="/css/styles.css" /> 
+0

我改變了css文件路徑,但它的劑量工作 –

0

我使用的解決方案是基本的HTML標籤,挑選出圖像和樣式表。

請務必使用:RewriteCond %{REQUEST_FILENAME} !-f至少 - 也許可以讓它更安全,所以直接路徑仍然可以。

+0

我有這條線在我的htaccess文件,但仍然有問題\ –