2012-06-16 94 views
0

我已經與我的網站主持聯繫,他們已經有點不太有幫助,所以我來到這裏的天才。mod_rewrite規則不起作用

我無法通過.htaccess文件在我的網站上重寫我的任何網址。

我只有一個.htaccess文件,位於我的主目錄的根目錄下。下面是該文件:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

# The support guys thought it was in issue with the L flag below, so I commented out my original implementation and used their supplied one 

#RewriteCond %{HTTP_HOST} ^www.mythofechelon.co.uk$ [NC] 
#RewriteRule ^(.*)$ http://mythofechelon.co.uk/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?mythofechelon\.co.uk)$ [NC] 
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L] 


RewriteRule ^/$ /main/pages/index.php?home 
RewriteRule ^/home(.*)?$ /main/pages/index.php?home 
RewriteRule ^/404(.*)?$ /main/pages/index.php?404 

#I will eventually change the following commands to link to the rewritten URLs when this all eventually works 
DirectoryIndex /main/pages/index.php?home 
ErrorDocument 404 /main/pages/index.php?404 

AddType application/x-shockwave-flash swf 

Options All -Indexes 

#Protect .htaccess 
<files .htaccess> 
    order allow,deny 
    deny from all 
</files> 

<Files *.reg> 
    ForceType application/pdf 
    Header set Content-Disposition attachment 
</Files> 

#Block bots 
<limit GET POST HEAD> 
    Order Allow,Deny 
    Allow from all 
    Deny from env=bad_bot 
</limit> 

RewriteRule ^.* - [F,L] 
RewriteCond %{HTTP_USER_AGENT} ^Anarchie [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ASPSeek [OR] 
RewriteCond %{HTTP_USER_AGENT} ^attach [OR] 
RewriteCond %{HTTP_USER_AGENT} ^autoemailspider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:[email protected] [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR] 
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR] 
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR] 
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR] 
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR] 
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR] 
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR] 
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR] 
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR] 
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR] 
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR] 
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR] 
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR] 
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR] 
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR] 
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR] 
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR] 
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR] 
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR] 
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Xenu [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Zeus.*Webster [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Zeus 

SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] 
SetEnvIfNoCase user-Agent ^Java.* [NC,OR] 
SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] 
SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] 
SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] 
SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] 
SetEnvIfNoCase user-Agent ^Zeus [NC] 

(男人,你們需要改變它,這樣你就不必手動縮進每一行。)

我已經獨立證實:

  • DirectoryIndex命令正在工作,因爲DirectoryIndex /main/pages/index.php工作。
  • 顯然,ErrorDocument 404命令正在工作。
  • 使用PHP變量鏈接到文件的工作原理與DirectoryIndexErrorDocument 404命令的當前實現一樣。
  • 這不是任何文件保護或殭屍阻止命令的問題。
  • 這不是「www。」的問題。刪除命令,因爲我已經註釋掉並徹底刪除了它們的所有嘗試實現,並仍然存在相同的問題。

問題出現在看起來完全與RewriteRule命令。 RewriteEngine已啓用,至少在.htaccess和mod_rewrite幾天前,我重新啓動我的網站前工作。

我在想這可能是因爲RewriteRule s沒有RewriteCond s,但這些確切的命令在幾天前工作。

+0

'RewriteRule ^。* - [F,L]'停止_all_重寫並給出403,這就是你想要的...並且你可以用'{}'鍵縮進文本塊:P – Wrikken

+0

我會說可能,但我認爲這是最初的評論。它是在我需要工作的'RewriteRule'命令之後?哦,謝謝你的提示!我的天啊,那一直很煩人。 :L – mythofechelon

回答

1

在你上面張貼的.htaccess,沒有立即重寫規則這些規則如下:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

因此,他們將與做重定向,但沒有規定應該辦理哪些文件下一註釋掉規則相結合這些請求:

RewriteCond %{HTTP_HOST} ^www\.(([a-z0-9_]+\.)?mythofechelon\.co.uk)$ [NC] 
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L] 

你會想是這樣的:

# Strip www. from domain name 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

# Send requests for non-existent files and directories to index.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^home/(.*)$ /main/pages/index.php?$1 [L] 

規則的順序對於mod_rewrite至關重要。文件中出現故障的另一個示例是您嘗試阻止不良機器人的部分。 RewriteRule必須遵循RewriteCond規則。另外,你的限制部分實際上並沒有做任何事情,因爲沒有關於機器人的規則實際上設置了環境變量。

實際上還有另一個指令,您可以專門用於查看用戶代理和設置環境變量:BrowserMatchBrowserMatchNoCase - http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#browsermatchnocase

我會像這樣的東西代替的壞機器人的臺詞:

BrowserMatchNoCase Anarchie bad_bot 

然後移動速度限制部下面的BrowserMatchNoCase條目 - 否則的環境變量可能還沒有設置。

另外,mod_rewrite標誌與SetEnvIfNoCase條目無效。

更新

要處理404,你既可以添加以下內容:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^!home/(.*)$ /main/pages/index.php?404 [L] 

或(,這是我的建議),你可以改變家鄉*然後。更新您的PHP腳本以在適當時發送404。

+0

謝謝。這已經解決了這個問題。然而,看起來'RewriteRule ^(。*)$ /main/pages/index.php?$1 [L]'以'ErrorDocument 404'方式行事,但將'bad URL'追加到'index.php?'。我不希望發生這種情況。我只希望「/ home」作爲重寫的URL(現在)以及其他所有發送到「/ 404」的地址。有沒有辦法做到這一點?是的,支持技術人員給了我一個新的殭屍阻塞系統,其功能與您所建議的一樣。不管怎麼說,還是要謝謝你。 – mythofechelon

+0

我編輯了我的帖子來解決這些問題。你只需要調整RewriteRule並保持你的ErrorDocument原樣。 – bradym

+0

我現在得到了404。 :/ http://mythofechelon.co.uk/home – mythofechelon