【问题标题】:Having problems with a Rewrite rule重写规则有问题
【发布时间】:2009-09-07 17:39:15
【问题描述】:

我有一个应用程序,其中大部分仍在开发中,这就是为什么我需要阻止对所有页面的访问,而不是其中两个。

假设我有 a.php,所有请求都会被重定向到这里,除了 b.php。

所以我认为应该有3条规则:

1st: when a.php and b.php are requested they should be visible to user,

2nd: if anything other than those two is requested, 
     it should be redirected to a.php.

3rd: for external css,javascript and image files 
     there should be an access rule

由于我在服务器管理方面没有太多经验,我相信我完全迷失了:)

这是我尝试过的:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !^/b.php
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ a.php

【问题讨论】:

  • +1 对于两个答案我选择了 Gumbo 的答案,因为我更了解规则,感谢两个答案..

标签: mod-rewrite redirect


【解决方案1】:

实际上,您可以交换第二条和第三条规则,因为您的第二条规则将是默认路由:

# 1st
RewriteRule ^(a\.php|b\.php)$ - [L]

# 3rd
RewriteRule \.(js|ico|txt|gif|jpg|png|css)$ - [L]

# 2nd
RewriteRule !^a\.php$ a.php [L]

替换为-表示URI没有变化。

【讨论】:

  • 我觉得不错。不要忘记'RewriteEngine on'。此外,定义这些规则的上下文(配置根目录、.htaccess)也很重要。
【解决方案2】:

我不确定您对 #3 的含义,但从您尝试的内容来看,我猜您的意思是,所有 js、ico、... 都将被重定向到 a.php。对吗?

如果是这样,那意味着a => a.php(带参数),b => b.php(带参数)和其他=> a.php。所以试试这个:

RewriteBase /
RewriteRule ^a\.php(.*) /a.php$1
RewriteRule ^b\.php(.*) /b.php$1
RewriteRule ^.*         /a.php

但如果你的意思是所有这些脚本和媒体文件都可以正常访问,试试这个:

RewriteBase /
RewriteRule ^a\.php(.*)                          /a.php$1
RewriteRule ^b\.php(.*)                          /b.php$1
RewriteRule ^(.*)\.(js|ico|txt|gif|jpg|png|css)$ /$1.$2

基本上,重写规则是正则表达式,$1,$2,...是匹配字符串组(用“(”和“)”包裹的)。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2011-02-23
    • 2014-01-23
    • 2014-09-26
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多