2009-07-11 53 views
0

我從湯姆給湯姆喂這個humccess的htaccess文件,我很感激它,因爲我學到了很多東西。不過,我做了一些改變和恢復來回,併成功地再次做出一些小的變化,它的工作原理80%,但有當它不工作的情況下:刪除重寫中生成的多餘字符

如果我在http://www.example.com/view.php?t=45re鍵入它成功地改寫但它在URL http://www.example.com/ **?t = ** 45re中是這樣做的,我看不到這是怎麼回事。再次幫助非常感謝。

# REWRITE DEFAULTS 
RewriteEngine On 
RewriteBase/

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^view\.php$/[L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

回答

1

我想你的意思是this post。我不得不承認,我忘記了替代中的空查詢來覆蓋它,就像Vinko已經提到的那樣。

那麼試試這個:

# /view.php?t=h5k6 externally to /h5k6 
RewriteCond %{THE_REQUEST} ^GET\ /view\.php 
RewriteCond %{QUERY_STRING} ^([^&]*&)*t=([^&]+)&?.*$ 
RewriteRule ^view\.php$ /%2? [L,R=301] 

# /h5k6 internally to /view.php?t=h5k6 
RewriteRule ^([0-9a-z]+)$ view.php?t=$1 [L] 

%2是一個逆向引用相應的RewriteCond指令的模式的第二組的比賽。所以%2將在這種情況下舉行([^&]+)^([^&]*&)*t=([^&]+)&?.*$的比賽。

1

不知道你的情況,也沒有什麼濃湯告訴你,從我可以從你的問題收集(即你想要的查詢字符串不是當外部重定向傳遞),您既可以

RewriteRule ^view\.php$ /? [L,R=301] 

注意額外的?,或

RewriteRule ^view\.php$/[L] 

去除外部重定向和使用一個內部。

+0

我試了兩個。第一個,在「/」後面沒有任何內容會重定向到主頁。第二個也會重定向到主頁,但仍顯示頁面和查詢字符串「/view.php?t=3ew」。 Gumbo,我覺得有一個「/%2」 - 我不確定它是什麼,所以我做了一些改變,我做了一些事情變得更糟! – Abs 2009-07-12 00:10:38

+0

是的,不要因爲你沒有去掉他們而刪除正在工作的部分!你可能會問「這裏%2是什麼意思?」在刪除它之前! :P – 2009-07-12 07:39:18