2011-03-31 129 views
10

我正在編程我的網站的新版本,我試圖讓.htaccess正確地重寫。我的新網站存儲在這裏:.htaccess RewriteRule在子目錄中不工作

www.example.com/storage/new/ 

我需要重寫這些URL:

www.example.com/storage/new/welcome/ -> index.php?action=welcome 
www.example.com/storage/new/page/name/ -> index.php?action=page&url=name 
www.example.com/storage/new/post/name/ -> index.php?action=post&url=name 

這是我的.htaccess文件:

RewriteEngine On 

RewriteRule ^/welcome/$ index.php?action=welcome [L] 
RewriteRule ^/page/([a-zA-Z0-9]+)/$ index.php?action=page&url=$1 [L] 
RewriteRule ^/post/([a-zA-Z0-9]+)/$ index.php?action=post&url=$1 [L] 

但是,它沒有工作;所有結果都是404 Not Found。我已經嘗試了一切,即使輸入www.example.com/storage/new/代替^。我在服務器的根目錄(www.example.com)其他的.htaccess,看起來像這樣:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

我無法想象,將如何影響www.example.com/storage/new/,但你永遠不知道。誰能幫我這個?

回答

10

我不得不電子郵件我的服務器的管理員的幫助和事實證明的.htaccess以自己的道路爲根;我簡單地刪除了每個規則中的^之前的第一個/。我的最終.htaccess文件如下所示:

RewriteEngine On 

RewriteRule ^welcome/$ index.php?action=welcome [L,QSA] 
RewriteRule ^page/(.*)/$ index.php?action=page&url=$1 [L,QSA] 
RewriteRule ^post/(.*)/$ index.php?action=post&url=$1 [L,QSA] 
2

^表示字符串的開始。 RewriteRules會查看example.com/後面的所有內容,因此您需要在模式中包含storage/new /(或刪除^)。

另外,我可能想添加NC標誌,以便您的模式匹配而不區分大小寫(例如/ Page /或/ page /都可以)。這意味着您可以更改[A-ZA-Z0-9]模式只是[A-Z0-9]

RewriteRule ^storage/new/welcome/$ index.php?action=welcome [L,NC] 
RewriteRule ^storage/new/page/([a-z0-9]+)/$ index.php?action=page&url=$1 [L,NC] 
RewriteRule ^storage/new/post/([a-z0-9]+)/$ index.php?action=post&url=$1 [L,NC] 
+0

感謝您的迴應,儘管它仍然無效。我已經嘗試過所有我能想到的東西,閱讀更多的教程,而不是我可以算的。什麼可能是錯的? – 2011-03-31 20:05:24

+0

好吧,嘗試添加一個重寫,並確保你最終在你期待的URL:RewriteRule^storage/new/welcome/$ index.php?action = welcome [L,NC,R = 301] – duncan 2011-04-01 08:07:43

+0

還是什麼都沒有。肯定還有其他的錯誤。我會提交支持票。感謝你的幫助! – 2011-04-01 19:28:40