2009-12-15 62 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