超鏈接所以我沒有的.htaccess專家,絕不是的,但我設法一起把這個代碼的網站我在做:mod_rewrite的與空間
Options -Indexes +Includes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase/
RewriteCond %{REQUEST_URI}::$1 ^(.*?/)(.*)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^\.htaccess$ - [F]
RewriteRule ^$ /%{ENV:BASE}/index.php?id=home
RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [R=301,L]
RewriteRule ^([a-zA-Z0-9]*)$ /%{ENV:BASE}/index.php?id=$1 [QSA,L]
</IfModule>
它基本上改變www.example.com/some/dir/index.php?id=home
到www.example.com/some/dir/home
雖然前幾條規則創建了某種相對路徑值,所以我不必每次更改基礎文件夾就更改RewriteBase(這對於此項目很重要!)。
它的工作原理非常好,但現在我遇到了一個問題,在URL中必須有空格,如www.example.com/some dir/sub folder/home
,這會弄亂一切。
如果你點擊頁面(例如「href="home"
」)上的鏈接重定向到www.example.com/home
,而不是www.example.com/some dir/sub folder/home
一個404錯誤,很明顯(儘管它的工作原理如果沒有空格!)。我發現如果右鍵單擊>「將鏈接複製到剪貼板」,即使它在地址欄中顯示解碼版本,它也會成爲編碼版本www.example.com/some%20dir/sub%20folder/home
。 但是如果您手動鍵入解碼版本www.example.com/some dir/sub folder/home
它仍然正常工作。
空間和編碼似乎有問題。我如何讓我的超鏈接正常工作?
- 編輯 - 感謝張貼elcodedocle的教程中,我只是簡單地添加反斜線空間:^([a-zA-Z0-9/ ]*)$
在最後一條規則正則表達式,即使它不是最好的方法。然後我注意到倒數第二條規則中的[L]
標誌。我刪除它,因爲這不應該是最後的規則(不知道爲什麼它在那裏首先...),現在它的工作原理!那麼,有點...
現在,如果在URL的末尾有一個尾部的斜線,它將不再有效。 Probabply因爲除去在規則中[L]
標誌的,但我不知道如何解決這個問題?
'HREF =「/家」'是絕對的,這意味着'www.example.com/ home'。 'href =「home」'是相對的變體,意思是'www.example.com/some dir/sub folder/home'。 URI中的特殊字符不應該影響這個。 – DaveRandom
請參閱http://stackoverflow.com/questions/5442658/spaces-in-urls。另外,關於你的'/ home'鏈接問題:通過讓'/'作爲'href'中的第一個字符,你告訴服務器你想要URL相對於你的根目錄'example.com'。如果你想在目錄樹中相對於你當前位置的'home',那麼只需使用'home'而不用前導'/'。或者,如果您希望鏈接始終指向'/ some dir/sub folder/home',無論您身在何處,請將其用作您的'href'。 – Benjam
哦,該死的,對不起,實際上在代碼中沒有任何'/'''之前,只是一個錯字。但是,如何告訴mod_rewrite如何處理這些編碼空間呢?對不起,如果這是一個愚蠢的問題,但我似乎不明白*爲什麼*它不會在URL中的空格。 –