2010-07-18 60 views
0

我想讓我的頁面seo友好。HTAccess頁與&標誌重定向問題

我在我的頁面有一個鏈接。

http://abc.com/test.php?Section=pages&title=feedback+%26+enquiry 

它工作正常,標題都有價值「反饋&查詢」。我上面的鏈接改爲:

http://abc.com/pages/feedback+%26+enquiry.htm 

我寫喜歡的htaccess代碼:

Options +FollowSymLinks 

RewriteEngine on 
RewriteRule index.htm$ index.php 
RewriteRule ^(.*)/(.*)\.htm$ /test.php?Section=$1title=$2 [R] 

我預料的一樣的結果,但作爲標題是有值或「feedbac我很驚訝地看到錯誤「和正在創建值」「的新變量」查詢「

我無法找到該錯誤。我猜它的htaccess轉換錯誤。所以我怎麼能使它工作?

我試着迴避,但得到了內部服務器錯誤。我的新的htaccess代碼:

Options +FollowSymLinks 

RewriteEngine on 
RewriteRule index.htm$ index.php 
RewriteRule ^(.*)/(.*)\.htm$ index.php?Section=$1&title=$2 [R,B] 

我的Apache的版本是:2.2.4

+0

刪除標點字符,他們看起來醜陋而引起的問題,如您有。除非你預計會有兩個標題'feedback&enquiry'和'feedback! enquiry'(在這種情況下,你仍然需要一些後綴來消除'u&i'和'u + i'的歧義) – msw 2010-07-18 12:17:18

+0

你的建議是放棄&和!是好的,但如果在任何情況下我們需要這樣做呢?我們無法避免它整個時間 – KoolKabin 2010-07-18 12:29:40

回答

0

如果你正在運行的Apache 2.2,你可以使用B標誌逃脫任何反向引用您的重寫URL:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B] 

否則,Apache 2.0中,你可以嘗試使用內部RewriteMapescape

RewriteRule ^pages/(.*)\.htm$ /test.php?title=${escape:$1} [R] 
+0

對不起,它通知最近的變化,因爲我在我的完整網址上出現錯誤。我編輯了我的文章,並寫了我的完整url,因爲我在使用[B]選項測試給定腳本時出現了內部服務器錯誤 – KoolKabin 2010-07-18 13:27:24

+0

@KoolKabin:如果您要保留'R',則應確保替換爲'/ index.php?index.php?Section = $ 1&title = $ 2 [R,B]',但是我真的不覺得你想要'R'了嗎?另外,你的錯誤日誌對內部服務器錯誤有什麼看法? – 2010-07-18 13:42:53

+0

我沒有收到任何錯誤代碼只有內部服務器錯誤信息。可以讓網站管理員配置爲不顯示錯誤代碼/消息。我嘗試了兩種選擇,但都失敗了。保持逃脫將發送標題=「」 – KoolKabin 2010-07-19 07:15:51

0

from the mod_rewrite doc

Apache在其映射之前取消轉義網址,因此向引用($ 1)將在它們被施加的時間來轉義。

因此您的feedback+%26+enquiry.htm被重寫爲test.php?title=feedback+&+enquiry,這自然會產生您看到的結果。

你能避免反向引用被添加'B'(逃脫後向引用)重寫標誌到您的重寫規則轉義:

RewriteRule ^pages/(.*)\.htm$ /test.php?title=$1 [R,B] 
查詢組件
+0

對不起,它通知最近的變化,因爲我在我的完整網址上出現錯誤。我編輯了我的文章,並寫了我的完整url,因爲我在使用[B]選項測試給定腳本時遇到內部服務器錯誤 – KoolKabin 2010-07-18 13:28:16

+0

確保'[R,B]'內沒有空格,即。 *不* * [R,B]'。 – 2010-07-18 14:02:16

+0

恩......我很確定,我有他們之間的空白,但仍然出現錯誤 – KoolKabin 2010-07-19 07:18:16