0

我有兩個指向完全相同文件的子域。我使用服務器端代碼來控制樣式/圖像。我想要一個特定的頁面只能訪問其中一個子域。我怎樣才能使用RewriteRules來實現這一點?使用特定子域訪問某個URL時顯示404錯誤

我有不同的域設置測試目的,但他們都開始http://MICROSOFThttp://APPLE。我只希望如果通過http://MICROSOFT.somethingelse.com/ http://MICROSOFT.another.sub.sub.domain/訪問網站,但不顯示http://APPLE.com或其他任何與主機名中的APPLE相關的網頁,則會顯示該網頁。

轉到http://microsoft.anythinghere/special-sub-directory/將按預期方式顯示該頁面,但前往http://apple.anythinghere/special-sub-directory/將顯示404錯誤。

這段代碼如何修改爲像我需要的那樣工作?

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^http://apple\.[A-z0-9]+/special-sub-directory/?$ - [R=404] 
</IfModule> 

請注意,這是一個WordPress站點,因此它具有以下規則的工作:

RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

回答

1

RewriteRule沒有獲得協議和主機名。你需要的是一個額外的RewriteCond

RewriteCond %{HTTP_HOST} ^apple\. [NC] 
RewriteRule ^special-sub-directory/?$ - [R=404] 

這些都是我的機器上工作的規則:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteRule ^special-sub-directory/?$ - [R=404] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
  • 他們放在裏面/.htaccess
  • 訪問http://localhost/special-sub-directory/生產404錯誤
  • 訪問http://127.0.0.1/special-sub-directory/顯示正確的頁面
  • 其他規則制定
+0

感謝您的答覆。我嘗試了你的代碼,但看起來像WordPress .htaccess規則導致它不起作用。請參閱我上面的更新。 (請注意,我試過在WordPress代碼之前和之後插入代碼) – Cofey

+0

嗯。我想知道如果問題是目錄不存在?該目錄實際上只是一個從WordPress的「頁面」創建的URL。 – Cofey

+0

刪除前導斜槓應該可以解決問題。該目錄不必在身邊。我做了尾隨的'/'需要......改成'/?$'使其成爲可選項。 –