2015-11-16 112 views
2

我有一個網站只由來自.html前端和我希望有漂亮的URL的.html。我的目標是這樣的漂亮的URL與參數

http://test.com/mypage.html => http://test.com/mypage 
http://test.com/mypage1.html => http://test.com/mypage1 

創造的東西,對於一個特定的頁面

http://test.com/my-prettlink.html?id=1 => http://test.com/my-prettlink/1 

我想這.htaccess它位於項目的根,但只有消除.html作品。

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_URI}.html [L] 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^my-prettylink/(\d+)*$ ./my-prettylink.html?id=$1 
+0

最後重寫路線將永遠不會達到添加<base href='/subdirectory/' />。它必須先來,因爲它更專業化。更一般的規則更接近尾聲。 – arkascha

回答

1

更具體的規則應該來之前一般規則。因此,嘗試:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase /subdirectory/ 

RewriteCond %{THE_REQUEST} ^GET\ /(subdirectory/my-prettylink)\.html\?id=(\d+) [NC] 
RewriteRule ^my-prettylink\.html$ /%1/%2? [R=301,L] 

RewriteCond %{THE_REQUEST} ^GET\ /(subdirectory/.+)\.html [NC] 
RewriteRule^/%1? [R=301,L] 

RewriteCond %{SCRIPT_FILENAME} -d [OR] 
RewriteCond %{SCRIPT_FILENAME} -f 
RewriteRule^- [L] 

RewriteRule ^my-prettylink/(\d+)$ my-prettylink.html?id=$1 [L] 

RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule ^(?!js|css) %{REQUEST_URI}.html [L] 

以及在頭

+0

當我打我的' - prettylink?ID = 1'鏈接沒有改變(但頁的作品),也'我-prettylink/1'拋出我'不found'。當我在'/my-prettylink.html?id=$1 [L]前刪除斜槓'還沒有發現 –

+0

@JozefDúc在哪裏文件在什麼位置?你把重寫規則放在哪裏?你是否想把醜陋的URL重定向到漂亮的URL? – hjpotter92

+0

文件與'.htaccess'文件位於同一個目錄中。我想重定向只有一個查詢字符串漂亮URL頁面(正如我在寫的問題),並從所有網址中刪除'.html'擴展 –