2012-06-03 73 views
3

我遇到了apaches mod_rewrite問題。我想用我的PHP應用程序製作乾淨的網址,但它似乎沒有給出我期待的結果。Apaches mod_rewrite問題

我使用這個代碼在我的.htaccess文件:

RewriteEngine on 
RewriteRule ^project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L] 
RewriteRule ^project/([0-9]{4})$ /project/index.php?q=$1 [L] 

爲了使它所以當我查看,http://localhost/user/project/system,這將是觀看http://localhost/user/project/index.php?q=system

而不是得到任何結果的equivelant我只是得到一個典型的404錯誤。

我也只是檢查,看看是否mod_rewrite的工作原理是用取代我的.htaccess代碼:

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule (.*) http://www.stackoverflow.com 

它正確這裏重定向我,所以mod_rewrite的肯定是工作。

根路徑到我的項目是/home/user/public_html/project

的用於查看我的項目的URL爲http://localhost/user/project

如果不再需要的信息讓我知道。

感謝

+0

如果刪除目標路徑中的前導'/',會發生什麼情況? –

+0

.htaccess文件位於何處?如果已經在項目/文件夾中,那麼在RewriteRule中提及它將不起作用。 – mario

+0

@Emil - 從我所看到的,什麼都沒有。 – Syx

回答

0

如果您的.htaccess文件確實位於project/子目錄中,則不要再次在RewriteRule中提及它。刪除它:

RewriteRule ^([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L] 
# no "project/" here 

規則總是與當前的本地文件名映射有關。

其他實驗RewriteBase

+0

我嘗試過從這裏開始: 'RewriteEngine on' 'RewriteRule ^([a-zA-Z0-9])$ index.php?component = $ 1 [L]' 但是隻讓我有一個整數或字符(無關緊要),如果我有了它,它會給我一個404頁面。 所以'http:// localhost/user/project/f','http:// localhost/user/project/1','http:// localhost/user/project/Q' all work,'http://localhost/user/project/system'沒有。 – Syx

+1

這已經向您解釋過。使用量詞'+' – mario

+0

是的,你是對的。對不起,今天我的愚蠢。我對正則表達式一無所知。我在結尾括號外加了+,這似乎是個訣竅。感謝您的時間和幫助,我非常感謝。 – Syx

0

你大概的意思

RewriteRule ^/project/([0-9]{4})/([0-9]{2})$ /project/index.php?q=$1&r=$2 [L] 
RewriteRule ^/project/([0-9]{4})$ /project/index.php?q=$1 [L] 

的「^項目」的意思是「行的開始是‘項目’」,但一開始是「/項目」,所以你需要包括開始斜線(即'^ /項目...')。


對不起,錯過了系統位(和用戶位)。正在專注於斜線。

RewriteRule ^/user/project/([a-zA-Z0-9]*)/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1&r=$2 [L] 
RewriteRule ^/user/project/([a-zA-Z0-9]*)$ /user/project/index.php?q=$1 [L] 

應該沒錯。

+0

不幸的是,它仍然給我一個404錯誤頁面。我已經將它上傳到我的webhosts服務器上,並且它也是404。我想檢查一下,看看它是否可能是我的設置。 – Syx

+0

因爲它只是匹配4位數的數字,所以我只是從正則表達式中刪除'{4}'? – Syx

+0

如果您不想與4個字符匹配,請將其設置爲*即[a-x] * – Robbie

0

你有[0-9] {4}在您的正則表達式將只匹配4個位數編號。然而,「系統」不是4位數字,因此不匹配。

您可以使用類似[^ /] +代替。

RewriteRule ([^/]+)/([0-9]{2})$ /index.php?q=$1&r=$2 [L] 
RewriteRule ([^/]+)$ /index.php?q=$1 [L] 

不知道第二個參數是否應該是一個2位數的數字。

編輯:我也是在開始時加入「用戶」了。

EDIT2:好的,我還以爲你是根的htdocs與htaccess的。因此,如果您使用.htaccess在「項目」中,請刪除「項目」和「用戶」。

+0

否,那也不重要。那是我的錯,問題在於本教程中沒有解釋。我也發佈了錯誤的代碼,0-9應該是a-z。我試過你的代碼,但是我收到了404。 – Syx

+0

我看到的另一件事是你有前面的「用戶」。我更新了我的答案,請試試這個。 –

+0

我開始以某種方式認爲它只是我的服務器,我有我的目錄符號鏈接的方式可能導致這個或在httpd.conf中沒有正確設置的東西。我試過你的代碼,它應該可以工作,但它仍然給了我404。如果.htacess被放置在/ user/projects中,有沒有一種方法可以將該目錄確定爲主路徑,並且ingore必須定義用戶和項目目錄? – Syx