2009-12-15 61 views
3

我的開發人員爲我提供了一些我們應用程序工作所需的Apache重寫規則。當我將它們添加到Apache時,我的www.domain.com/blog和www.domain.com/phpmyadmin頁面不再有效。我試圖爲我的博客添加第一個RewriteCond規則,也嘗試添加最終的phpmyadmin規則,但是沒有一個按預期工作。基本上我想要/ blog或/ phpmyadmin的任何請求不要重寫並進入我的文檔根目錄並在重寫之外運行這些應用程序。你能幫我找出一個解決方案嗎?謝謝需要關於Apache Rewrite問題的幫助

RewriteCond %{REQUEST_URI} !^/blog/ 
RewriteRule ^/(.*_css.*\.css.*) /$1 [QSA,L] 
RewriteRule ^/(.*_js.*\.js.*) /$1 [QSA,L] 
RewriteRule ^/(.*_swf.*\.swf.*) /$1 [QSA,L] 
RewriteRule ^/(.*_img.*\.[jpg|JPG|jpeg|JPEG|gif|GIF|bmp|BMP|png|PNG].*) /$1 [QSA,L] 
RewriteRule ^/(.*)$ /index.php?url=$1 [QSA,L] 
RewriteRule ^/phpmyadmin(.*)$ /phpmyadmin$1 [QSA,L] 
</VirtualHost> 

他們位於www.domain.com/blog和www.domain.com/phpmyadmin。

的Apache 2.2.13

謝謝!

回答

2

如果你想避免重複與/blog//phpmyadmin/開頭的URL,那麼你可能能夠與第一條規則就完事了這樣的事情可以做的工作是:

RewriteRule ^/(?:blog|phpmyadmin)/ - [L] 

(更換您的RewriteCond然後去除老phpMyAdmin的規則)。

一個快速的解釋:這個匹配以/blog//phpmyadmin/開始,不重寫它們(-用於替換)的任何URL,然後停止任何進一步的改寫([L])。


以前的答案:

你重寫規則是矛盾的,作爲一個開始。此外,目前,RewriteCond僅適用於第一條規則。而且,由於匹配所有內容之前的規則,最終的規則會被忽略。你可能想是這樣的:

RewriteRule ^/blog/(.*)$ /index.php?url=$1 [QSA,L] 

我假設你只是想所有的URL重寫從/blog/foo/bar/index.php?url=foo%2fbar?如果不是,請解釋你想要完成的事情,然後編輯我的答案。

+0

謝謝戴夫,第一個和最後一個重寫規則是我正在改變的規則,其他規則是我們的應用程序使用的。我有一個博客和phpmyadmin目錄關閉文檔根目錄。我不希望這些在任何地方被重寫。當有人點擊www.domain.com/blog或phpmyadmin我希望這些應用程序正常工作,而不是重寫。目前它們屬於重寫規則之一,不起作用。謝謝 – roacha 2009-12-15 15:05:57

+0

Dave我用更多的細節更新了我最初的問題,我希望解釋我正在努力完成的事情。謝謝! – roacha 2009-12-15 15:30:40

+0

因此,對於初學者,您需要將phpMyAdmin規則移到其他規則之上,因爲像Dave說的那樣,它的右上方匹配了所有內容,因此係統永遠不會查看您當前寫入的phpMyAdmin規則。 – rhodesjason 2009-12-15 15:33:40

0

錯誤...不知道你在做什麼。你是否試圖將靜態文件「排除」爲圖像/樣式表/閃存電影/ JavaScript文件以及PHPMyAdmin的鏈接?也許對你快‘東經dirrrrty’

# Enable the RewriteEngine 
RewriteEngine On 
RewriteBase /

# Check if the file, directory or symlink does not already exists. 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-F 
RewriteCond %{REQUEST_FILENAME} !favicon\.ico 
RewriteCond %{REQUEST_FILENAME} !robots\.txt 

# Rewrite all other requests to the index.php 
RewriteRule ^(.+)$ /index.php?url=$1  [QSA,L] 
+0

感謝您的反饋Charles,在將這些規則置於正確位置後,我的Apache重新啓動失敗,並顯示以下消息: /usr/local/apache2/conf/extra/httpd-vhosts.conf第46行的語法錯誤: RewriteBase:只在每個目錄的配置文件中有效 然後我刪除了RewriteBase行,Apache啓動了,但我的應用程序不再按預期工作。 – roacha 2009-12-15 07:18:19

+0

他認爲該行將在'.htaccess'文件中。你可以嘗試刪除'RewriteBase'行。你在做什麼? – DMI 2009-12-15 08:23:31

+0

感謝Dave,我確實刪除了RewriteBase行,Apache啓動了,但我的應用程序不再正常工作。我所要做的就是添加一條不會重定向我的博客或phpmyadmin網址的規則。 www.domain.com/blog和www.domain.com/phpmyadmin。我將這兩個目錄都放在我的文檔根目錄下。 – roacha 2009-12-15 08:42:44