2012-10-31 48 views
-1

重寫我想從網址在PHP localhost通過的.htaccess不工作

http://localhost/Ent/Movie/Info.php?year=2011&movie=any_movie 

http://localhost/Ent/Movie/Info/2011/any_movie 

我曾嘗試在.htaccess很多代碼重寫URL ,像

Options +FollowSymLinks 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteBase /Ent/Movie/ 
RewriteRule ^Info/([0-9]+)/([a-zA-Z0-9]+)$ Info.php?year=$1&movie=$2 [L] 

這裏注意到,我的.htaccess文件位於網站的根目錄。

是我的.htaccess位置錯誤代碼裏面.htaccess?

+0

出了什麼問題? – SomeKittens

+0

http://localhost/Ent/Movie/Info.php?year = 2011&movie = any_movie不是重寫到http:// localhost/Ent/Movie/Info/2011/any_movie – iChirag

+0

我認爲如果重寫代碼是好的,那麼: localhost/Ent/Movie/Info/2011/any_movie將返回結果。和localhost/Ent/Movie/Info.php?year = 2011&movie = any_movie不會自動重寫。 –

回答

1

從外部重定向瀏覽器到更好看的URL(不含查詢字符串):

RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /Ent/Movie/Info\.php\?year=([^&]+)&movie=([^&\ ]+)([^\ ]*) 
RewriteRule^/Ent/Movie/Info/%2/%3?%4 [L,R=301] 

然後在內部把它改寫回

RewriteRule ^/?Ent/Movie/Info/([0-9]+)/(.*)$ /Ent/Movie/Info.php?year=$1&movie=$2 [L,QSA] 

這些規則在文檔根走,他們'd直接進入:

Options +FollowSymLinks 
RewriteEngine on 
+0

中對查詢字符串進行匹配「外部」和「內部」是什麼意思? – iChirag

+0

@Downloadmore外部意味着發送給瀏覽器的響應或者發送請求的響應是「你想要的東西已經移動了,在這裏過去」,這取決於瀏覽器去取回它。它在服務器的外部,服務器響應重定向,這就是故事的結尾。內部意味着瀏覽器發送請求,服務器在內部(全部在服務器內)重寫請求並通過其內部URL處理管道將其發送回去,可能在其結束時,它將內容發送給瀏覽器,所有內部重定向 –

+0

@Downloadmore另請參閱此答案的頂部部分:http://stackoverflow.com/a/11711948/851273 –

0
RewriteRule ^Info/([0-9]+)/([a-zA-Z0-9]+)$ Info.php?year=$1&movie=$2 

會向相反的方向匹配的重寫,所以你需要邏輯反向喜歡的東西:

RewriteRule ^Info.php?year=([0-9]+)&movie=([a-zA-Z0-9]+)$ Info/$1/$2 

首先是你想匹配的內容,第二個參數是你想要的圖案生產。 請參閱mod_rewrite tutorial

+0

@Petr什麼應該是.htaccess文件的位置意味着根位於或Ent文件夾或在電影文件夾中 – iChirag

+0

不知道 - 檢查文檔。 :) 我的猜測是,如果你把它放入電影,你可以擺脫RewriteBase - 但這只是一個猜測。 – peterph

+0

你無法在重寫規則 –