我的开发人员为我提供了一些Apache重写规则,这些规则是我们的应用程序工作所必需的。当我将它们添加到Apache时,我的www.domain.com/blog和www.domain.com/phpmyadmin页面不再有效。我试图为我的博客添加第一个RewriteCond规则以及最终的phpmyadmin规则但是没有一个按预期工作。基本上我想要/ blog或/ phpmyadmin的任何请求都不要重写并转到我的文档根目录并在重写之外运行这些应用程序。你能帮我找出解决方案吗?感谢
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
谢谢!
答案 0 :(得分:2)
如果您想避免重写以/blog/
或/phpmyadmin/
开头的网址,那么您可以能够逃脱第一条规则:
RewriteRule ^/(?:blog|phpmyadmin)/ - [L]
(替换你的RewriteCond
,然后删除旧的phpmyadmin规则。)
快速解释:这会匹配以/blog/
或/phpmyadmin/
开头并且不会重写它们的任何网址(替换时为-
),然后停止任何进一步的重写({ {1}})。
上一个回答:
一开始,您的重写规则是冲突的。此外,目前,RewriteCond仅适用于第一条规则。此外,最终规则被忽略,因为在匹配所有内容之前的规则。你可能想要这样的东西:
[L]
我认为您只是想重写从RewriteRule ^/blog/(.*)$ /index.php?url=$1 [QSA,L]
到/blog/foo/bar
的所有网址?如果没有,请解释你想要完成的事情,我会编辑我的答案。
答案 1 :(得分:0)
错误......不确定你要做什么。您是否尝试将“排除”静态文件作为图像/样式表/ flash电影/ 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]