2014-04-17 94 views
0

我在尋找阻止人們訪問某些服務器上的登錄URL的方法。mod_rewrite - 將頁面重定向到索引

理想我想辦法解決,而不必引用域(有許多領域,許多服務器環境),我想要把規則在全球範圍內的httpd.conf,而不是單獨的虛擬主機。

我試過各種mod_rewrite,無濟於事,或可怕的表現,例如;

RewriteRule ^/login$ /index.php [R,L] 
RewriteRule ^login/?$ $1/$2 [R=301,L] 

一個需要注意的是,它需要與我的URL重寫;

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME}/index.html !-f 
RewriteCond %{REQUEST_FILENAME}/index.php !-f 
RewriteRule . index.php [L] 
</IfModule> 

..總之,我想要這些;

http://mysite.co.uk/login 
http://mysite.co.uk/index.php/login 

去這裏;

http://mysite.co.uk/ 
+0

那麼你的問題是寫出正確的重寫規則還是把它放在httpd.conf中。從你的解釋'RewriteRule login /?$/[R = 301,L]'應該這樣做。你是否在httpd.conf文件的目錄中有這個規則? – AthanasiusKirchner

+0

我的問題是編寫正確的重寫規則,以及將它放在全局conf中的位置。 – moth

回答

0

下面應該重定向你到你的網站根目錄提供的例子:

RewriteEngine On 
RewriteRule ^/(index.php/)?login/?$/[R,L] 

只要你現有的規則之前將它們放置,他們應該做你想要什麼。

+0

我可以通過本地MAMP設置進行這項工作。我無法弄清楚的是如何將登錄重寫移動到httpd.conf,同時保留單獨的虛擬主機文件。 – moth

+0

我認爲你有2個選項,但都需要編輯每個虛擬主機配置。第一個選項:只需在虛擬主機中使用一個簡單的'Include/path/to/general_rewrite_config'。第二種選擇:將重寫規則放入全局文件中的目錄Container中,即在所有虛擬主機的根路徑中(僅適用於此情況)' RewriteEngine On ....'並使用'RewriteEngine on RewriteOptions inherit'在虛擬主機容器中。 – AthanasiusKirchner

+0

明白了。扔我的位是「RewriteOptions繼承」。我認爲這不重要,因爲我現有的重​​寫已經有效,但登錄重寫被忽略了。根據其他建議將其設置爲@ arco444 snippet,並放入。 – moth