2012-10-21 79 views
9

我已經搜索了這個問題,但我只會遇到真正具體的答案,似乎很難適應我的具體需求。.htaccess重寫查詢字符串爲路徑

比方說,我試圖重寫URL是這樣的:

http://www.example.org/test.php?whatever=something 

我想重寫它,使它看起來就象這樣:

http://www.example.org/test/something 

我怎樣才能做到這一點?

+2

下面是一些例子:https://wiki.apache.org/httpd/RewriteQueryString –

回答

19

爲了航線像/test/something的請求在內部重寫,這樣在/test.php?whatever=something內容被提供服務,你會使用htaccess的文件,這些規則在您的文檔根目錄:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?test/(.*?)/?$ /test.php?whatever=$1 [L] 

而且爲了重定向查詢字符串URL到更好看的一個:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?whatever=([^\&\ ]+) 
RewriteRule ^/?test\.php$ /test/%1? [L,R=301] 
+0

絕對完美的,謝謝! – UserIsCorrupt

+0

如果通過使用上面的代碼,如果某人在尾部查詢字符串中有問題,那麼他們只需要在最後一條規則末尾添加尾部問號,這裏是一個更新代碼 'RewriteCond%{THE_REQUEST}^[AZ] {3, 9} \ /test\.php\?whatever =([^ \&\] +) RewriteRule^/?test \ .php $/test /%1? [L,R = 301]' –

+0

我使用相同的規則,但它不工作我的網址是http://example.com/directory1/directory2/login.php?id=8,我想使它像http: //example.com/directory1/directory2/login/8請告訴我如何解決它 –