2009-10-13 227 views
0

我们的应用程序使用重写规则在我们的PHP应用程序和我们的开发者加入这些重写规则,我们的Apache虚拟主机文件:阿帕奇重写规则阻止我们的应用程序的部分

我已经基于以下建议更新了我们的重写规则。 !

目前我的虚拟主机文件中的配置是这样的:

的RewriteCond%博客-d 重写规则^ /(A-ZA-Z0-9 - , - ] +)/ $ /index.php?a? = $ 1

RewriteCond%blog!-d RewriteRule^/([a-zA-Z0-9 - ,] +)/([a-zA-Z0-9 - ,] +)/?$/index ?!.PHP一个= $ 1 & b = $ 2

的RewriteCond%博客-d 重写规则^ /([A-ZA-Z0-9 - ,] +)/([A-ZA-Z0-9-, ] +)/([a-zA-Z0-9 - ,] +)/?$ /index.php?a=$1 & b = $ 2 & c = $ 3

RewriteCond%blog!-d RewriteRule^/([a-zA-Z0-9 - ,] +)/([a-zA-Z0-9 - ,] +)/([ a-zA-Z0-9 - ,] +)/([a-zA-Z0-9 - ,] +)/?$ /index.php?a=$1 & b = $ 2 & c = $ 3 & d = $ 4 & e = $ 5

我目前能够成功访问我们所有的其他应用程序选项卡,例如/ goods等。但我仍然无法访问www.test.com/blog

它仍然将我重定向到我们的应用程序的主要index.php页面。从改写日志:

[13/Oct/2009:17:08:41 - 0400] [www.test.com/sid#8d03d8][rid#b902d8/initial](1)通过/博客/wp-login.php [13/Oct/2009:17:08:41 - 0400] [www.test.com/sid#8d03d8][rid#b942f8/initial](1)用/的public_html/index.php文件[OK]

感谢

回答

2

您正在尝试了很多东西,在你的重写规则。我建议你不要。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/(.*)$ /index.php?url=$0 [PT,L] 

我建议你把整个字符串改写成$_GET['url']变量。你可以在代码中分解这个变量。这样你只需要编辑你的虚拟主机一次。

RewriteCond仍然在双向计数(在上面和下面的例子中)。

这些重写条件将检查文件或目录是否存在。如果不是将应用重写规则

如果条件将无法正常工作尝试把每RewriteRule 这样上面的条件:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/([a-zA-Z0-9-,]+)/?$ /index.php?a=$1 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/?$ /index.php?a=$1&b=$2 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/?$ /index.php?a=$1&b=$2&c=$3 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/([a-zA-Z0-9-,]+)/?$ /index.php?a=$1&b=$2&c=$3&d=$4 
+0

感谢您的反馈Robert。在尝试您的建议后,我意识到我原来的问题描述不准确。如果您有时间,请查看我的更新说明。再次感谢! – Steve 2009-10-13 16:41:53

+0

史蒂夫,我的解决方案仍然有效吗? – 2009-10-13 18:58:22

+0

Robert,我尝试了上面更新的命令,并在每条规则上面指定了ReWriteCond,但我仍然得到相同的行为。请参阅我的更新说明。再次感谢您花时间帮助。 – Steve 2009-10-13 21:25:00

0

尝试使用条件

RewriteCond %{REQUEST_URI} !^/blog$ [OR] 
RewriteCond %{REQUEST_URI} !^/blog/ 
RewriteRule ^/([a-zA-Z0-9-_,]+)/?$ /index.php?a=$1 

这是一个玩条件和正则表达式的问题。当URI以“/ blog /”开头时,这应该防止触发重写。

+0

感谢您的投入Michal。我修改了重写规则以匹配上面的示例。但现在我看到了奇怪的行为。我可以访问我的网站www.dudeimgettingmarried.com并点击气泡图标以访问www.dudeimgettingmarried.com/blog并且它完美地加载。但是,如果我直接在浏览器中输入该URL,它将被重定向到一个失败的页面。任何想法为什么?我也可以通过书签访问我的WordPress的管理页面,但是当我尝试真正的URL时,它会再次因重定向问题而失败:http://www.dudeimgettingmarried.com/blog/wp-admin/wp-login。有任何想法吗?谢谢 – Steve 2009-11-11 16:53:08

+0

是的,我改变了帖子。问题在于最后的斜线。现在即使您输入example.com/blog和example.com/blog/,它也应该可以正常工作 – 2009-11-14 17:29:07