2016-05-13 68 views
1

我想在我的htaccess文件上設置2個重定向,但我不能讓它工作。Apache重定向使用RewriteEngine有和沒有查詢字符串

所需的輸出是:

  • 如果用戶去www.mywebsite.com/page1,它就會被重新定向到/folder/newPage
  • 如果用戶去www.mywebsite.com/page1?a=123,它就會被重新定向到/folder/anotherPage?a=123

我試圖這

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^/page1$ /folder/newPage [R=301,L] 

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^/page1(.*)$ /folder/anotherPage$1 [R=301,L] 

我也嘗試過這樣的事情:

RewriteCond %{REQUEST_URI} ^/page1$ 
RewriteRule ^(.*)$ /folder/newPage [R=301,L] 

RewriteCond %{REQUEST_URI} ^/page1$ 
RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(.*)$ /folder/anotherPage%1 [R=301,L] 

注意重寫國防部已開啓對我的Apache。

任何想法如何使它工作?

回答

1

檢查通過如下:

  1. RewriteEngine On是所有的規則之前存在
  2. AllowOverride指令允許你的htaccess文件加載
  3. htaccess的接收網址,沒有前導斜槓,不同於服務器配置文件,或VHosts文件。
  4. .*匹配0或更多個字符,因此%{QUERY_STRING} ^(.*)$也匹配空的查詢字符串。將其更改爲.+

最終規則應該是:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^page1$ /folder/newPage [R=301,L] 

RewriteCond %{QUERY_STRING} ^(.+)$ 
RewriteRule ^page1$ /folder/anotherPage?%1 [R=301,L] 
+0

'RewriteEngine敘述On'設置在文件的開頭。重寫mod打開並正常工作。關於3.不知道如何驗證這一點? – alexmngn

+0

@alexmngn變化'^重寫規則/第1頁$''要重寫規則^ 1頁$' – hjpotter92

+0

我第一次一個工作,但不是第二個...好像第一條規則接管第二規則 – alexmngn

相關問題