2013-10-29 87 views
0

我想將mod重寫應用到我的URL,使其更好,但我陷入了這個問題的所有困惑。htaccess國防部重寫混淆

請你能幫助我什麼,我想要做下面的例子:

我想從我的站點的根目錄的任何變量連接到lyprofile.php頁面

# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{THE_REQUEST} /(.*) 
RewriteRule /(.*) lyprofile.php?us=$1 

我想這樣的URL配置文件/設置去lysettings.php

# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{THE_REQUEST} /profile/settings 
RewriteRule /profile/settings lysettings.php 

這兩個例子,如果工作應該幫我找出我的所有其他的URL,但我不能讓這些工作。

你也需要一個絕對的URL,因爲我在我的本地機器上工作,絕對URL會引起很多麻煩。以防萬一我的絕對URL是http://localhost/Linku2.5/

回答

1

您通常希望從最具體的規則到最不具體的規則。你要做的兩件事,第一件是最不具體的,因爲(.*)可以是任何東西。所以我們必須從更具體和更少的任意/profile/settings開始。

如果這些規則是在你的htaccess文件(在你的情況下,在Link2.5目錄),你不希望一個領導斜線,所以乾脆:

# you only need to turn on once 
RewriteEngine On 

# Don't need absolute URLs, but you may need this line: 
RewriteBase /Link2.5/ 

RewriteRule ^profile/settings lysettings.php [L] 

然後,因爲你的其他規則是這樣一般情況下,你需要添加一些條件,使您不會導致無限循環(重寫引擎將繼續循環,直到URI停止變化):

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.+)$ lyprofile.php?us=$1 [L,QSA] 

如果你知道你的「我們」變量只能是數字或字母,你可以使規則更具規格IFIC:

RewriteRule ^([A-Za-z0-9]+)$ lyprofile.php?us=$1 [L,QSA] 

+0

我已經試過這一遍又一遍,它只是說,URL無法找到;我做錯了什麼! –

+0

@JackTrowbridge確保一切都在正確的位置,確保mod_rewrite已打開,確保正在讀取您的htaccess文件,確保您可以訪問目標(例如lysettings.php和lyprofile.php),檢查錯誤日誌, –

+0

我有,但也有另一個問題,我認爲這種方法使我無用。當我確實讓它與其他代碼一起工作時,例如我有url重定向到lysettings.php的「profile/settings」;問題出在lysettings.php中,它的行爲就像它具有url profile/settings一樣,所以所有樣式表和鏈接都沒有找到,因爲它們是從root引用的;它不重定向它基本上作爲網址?這是正常的嗎? –

0

你能檢查這在vhosts配置嗎?

# Turn mod_rewrite on 
RewriteEngine On 

RewriteRule lyprofile\.php - [L] 

RewriteCond %{REQUEST_URI} /(.*) 
RewriteRule /(.*) lyprofile.php?us=$1 [L] 

RewriteCond %{REQUEST_URI} /profile/settings 
RewriteRule /profile/settings lysettings.php [L]