2011-03-01 48 views
1

確定,基本上國防部重寫的URL,如 「http://miniqr.com/http://www.anyurl.com/」(沒有錯誤)

http://miniqr.com/http://www.anyurl.com/

(無錯字)

應該叫

http://miniqr.com/api/create.php?content=http://www.anyurl.com/

實現這一目標,我有這個根的.htaccess

重寫規則^ HTTP:\/\ /(。*)$ \/API \ /create.php \含量= HTTP:\/\/$ 1 [L]

重寫規則^ HTTPS:(。*)?\/\/$ \/API \ /create.php \含量= HTTPS:\/\/$ 1 [L]

悲哀的是,它曾經工作過,那麼服務器進行了更新,現在它不工作

任何人知道爲什麼嗎? (或不知道另一種方式來做到這一點),幫助將是真棒

我的.htaccess差不多這個樣子的:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^miniqr\.com$ [NC] 
RewriteRule ^(.*)$ http://miniqr.com/$1 [L,R=301] 

RewriteRule ^(^$|index\.php|robots\.txt|docs|reader\/) - [L] 
RewriteRule ^http:\/\/(.*)$ \/api\/create\.php\?content=http:\/\/$1 [L] 
RewriteRule ^https:\/\/(.*)$ \/api\/create\.php\?content=https:\/\/$1 [L] 

回答

1

RewriteRule看到它之前,URL路徑被標準化,特別是,///替代。你應該申請您的規則到原來的請求,而不是像這樣:

RewriteCond %{REQUEST_URI} ^/(https?:.*) 
RewriteRule^/api/create.php?content=%1 [L] 

%1是指由RewriteCond完成了比賽。
%{REQUEST_URI}是在HTTP請求的第一行的實際查詢。


可替代地,是不太嚴格的,並接受方案之後的單個/以及//,由於路徑可能由用戶代理或代理通過類似地歸一化。

+0

嘗試的第一個方法,非常完美,將看到有關其他。多謝 – 2011-03-01 15:07:29

0

不要將此引入重定向循環?:

RewriteCond %{HTTP_HOST} !^miniqr\.com$ [NC] 
RewriteRule ^(.*)$ http://miniqr.com/$1 [L,R=301] 

你想用它達到什麼目的?

+0

http://www.miniqr.com/.* - > HTTP 301 - > http://miniqr.com/.*和它似乎工作 – 2011-03-01 14:56:46

+0

評論CMS搞砸了上述評論... WWW。 miniqr.com - > HTTP 301 - > miniqr.com – 2011-03-01 15:08:50