2017-07-26 91 views
0

請幫助我努力了,但它不起作用。.htaccess 301僅針對特定IP地址重定向

我想要完成的是簡單地將我們公司網絡中的所有用戶(都使用相同的外部IP地址,比如說192.168.0.1)重定向到htp://start.example.com/page_2 HTP://start.example.com/page_1。所有其他IP地址應該只是訪問htp://start.example.com/page_1。

我用盡這條規則:

1:

RewriteEngine On 
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$ 
Redirect 301 /page_1 http://start.example.com/page_2 

在這種情況下,重定向只有當IP檢查功能的工作原理。

2:

RewriteEngine On 
RewriteBase/
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$ 
RewriteCond %{REQUEST_URI} !^page_2$ 
RewriteRule .* http://start.example.com/page_2 [R=301,L,NC] 

在這種情況下,重定向僅在路徑檢查功能的工作原理。

有什麼問題?

Oké,找到解決方案,不知何故重定向的位置不起作用,我將它移動到文檔的頂部,現在可以使用以下語法。在這個例子中,我添加了一個額外的IP檢查和一個用戶代理「Windows」檢查。

RewriteEngine On 
RewriteBase/
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$ [NC,OR] 
RewriteCond %{REMOTE_ADDR} ^192\.168\.1\.1$ [NC] 
RewriteCond %{HTTP_USER_AGENT} Windows 
RewriteRule page_1$ http://start.example.com/page_2 [R,L,NC] 
+0

哦,我知道文本中的鏈接是htp而不是http,這是爲了發佈這個問題,有一個檢查內置,以防止用戶使用許多鏈接。在這種情況下不是很有幫助。 – nielsvoo

+0

我認爲你應該檢查一下不同的stackexchange(https://serverfault.com/),我相信這些更加關注這些問題。 – Amndeep7

回答

0

第一個是兩個不相關的指令從RewriteCondmod_rewrite和從mod_aliasRedirect的混合。 RewriteCond沒有關聯RewriteRule

第二個不能工作,因爲REQUEST_URI總是包含前導斜槓。在適當的條件下將

RewriteCond %{REQUEST_URI} !^/page_2$ 

規則重寫任何東西(.*)至page_2,不只是page_1。爲了恰當地限制這種情況,這應該是

RewriteRule ^page_1$ http://start.example.com/page_2 [R,L,NC] 

如果還有其他重定向,例如在結尾處增加一個路徑,條件應該反映這個這也通過消除串標記$

RewriteCond %{REQUEST_URI} !^/page_2 

結束這符合什麼開始/page_2

您也可以從重定向排除其他的路徑,用豎線分隔

RewriteCond %{REQUEST_URI} !^/(page_2|page_3) 

最後,從未測試與R=301

+0

Ha Olaf,感謝您的回覆,我已經嘗試了您的解決方案,但現在page_2不會顯示,因爲有很多重定向... – nielsvoo

+0

@nielsvoo這種情況不應該發生,因爲'page_2'被這種情況排除在外。也許有其他規則/重定向導致這一點。 「page_2」是一個真正的靜態文件還是其他的東西,比如目錄? –

+0

Hi Olaf,page_2是Drupal 8站點上的路徑別名。 .htaccess文件中有一些重定向,全部由Drupal自行完成。 – nielsvoo