2010-06-07 105 views
1

這些是來自我的兩個本地主機站點的.htaccess文件。Mod_rewrite導致404錯誤

虛擬主機1(mysite1.com):

# this is the initialization 
Options   +FollowSymLinks 
RewriteEngine On # Turn on the rewriting engine 
RewriteRule ^news-07/?$ news_01_06_2007.php [NC,L] 
# Handle requests for "news" 
RewriteCond %{REQUEST_FILENAME} !-s 
RewriteRule ^(.*)\.php$ $1 [nc] 
#RewriteRule ^(.*)\.php$ http://mysite1.com/$1 [R,NC] 

然而,當我嘗試http://www.mysite1.com/testfile.php - 它重定向到http://mysite.com/testfile因爲它應該做的,除了顯示此消息:

未找到
在此服務器上找不到請求的URL/testfile。

如何解決此錯誤消息並確保我的.htaccess文件有效?

我很好理解.htaccess,關於阻塞蜘蛛等等東西,但是這個問題引起了我一些問題,任何人都知道什麼是錯的,以及我怎樣才能防止這個錯誤再次發生?

所有幫助表示讚賞。

+0

嗯,這是按照你的要求去做:將所有'xyz.php'重寫爲'xyz'。你是否想以另一種方式來做? – 2010-06-07 15:22:37

+0

不,我試圖寫xyz.php到xyz - 但它把它當作是沒有這樣的文件。 不知道我做錯了什麼... – whitstone86 2010-06-07 15:38:15

+0

你想達到什麼目的?通過將'xyz.php'重寫爲'xyz',apache將在您的服務器上查找一個名爲'xyz'的文件。這可能不存在。你是否想要加載相關的PHP腳本? – 2010-06-07 16:12:15

回答

0

我想你可能會試圖向後做。嘗試是這樣的:

RewriteCond %{REQUEST_FILENAME} !-s 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ $1.php [nc] 
0

打開MultiViews

Options +MultiViews 

這將工作不僅.php文件,但所有文件的客戶聲稱在請求接受。請參閱here。請注意,Apache中的錯誤但正常工作的配置在過去給了MultiViews一個錯誤的名稱,請參閱here以確保您正確配置了Apache。

如果你想使用重寫規則,我應該這樣做,而不是(未經測試):

RewriteCond $0 !\.[a-zA-Z0-9]+$ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^.*$ $0.php [QSA] 

QSA標誌是必要的,以便於你不失去查詢字符串