Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache mod_别名重定向匹配除一个URL之外的所有URL_Apache_Mod Rewrite_Apache2_Mod Alias - Fatal编程技术网

Apache mod_别名重定向匹配除一个URL之外的所有URL

Apache mod_别名重定向匹配除一个URL之外的所有URL,apache,mod-rewrite,apache2,mod-alias,Apache,Mod Rewrite,Apache2,Mod Alias,我想用路径将所有页面重定向到维护站点 /软件/web/app.php/update 所以我需要重定向所有页面,除了站点本身,否则我会得到一个重定向循环,这意味着我需要一个匹配该路径的规则并否定它。听起来很容易,但对我来说不起作用 这场比赛/software/web/app.php/update h*tp://abc.de/software/web/app.php/update 重新匹配^/software/web/app.php/update$h*tp://abc.de/software/web

我想用路径将所有页面重定向到维护站点

/软件/web/app.php/update

所以我需要重定向所有页面,除了站点本身,否则我会得到一个重定向循环,这意味着我需要一个匹配该路径的规则并否定它。听起来很容易,但对我来说不起作用

这场比赛/software/web/app.php/update h*tp://abc.de/software/web/app.php/update

重新匹配^/software/web/app.php/update$h*tp://abc.de/software/web/app.php/update

重定向匹配^/software/web/app.php/更新$h*tp://abc.de/software/web/app.php/update


这些都没有帮助。我在这里和其他网站上找到的几乎所有东西都试过了,但经过几个小时的试用,我投降了,并恳请您的帮助。提前感谢您。

您只需一个简单的重写规则,并加上一个条件即可:

RewriteEngine on
RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
RewriteRule .* /software/web/app.php/update [R=307]
如果维护站点包含图像之类的内容,则需要从规则中排除这些图像,例如:

RewriteEngine on
RewriteCond %{REQUEST_URI} !(^/images/maintaining.jpg$)
RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
RewriteRule .* /software/web/app.php/update [R=307]
如果您正在重定向到另一个站点,则可以使用该规则放置整个URL:

RewriteRule .* http://example.com/software/web/app.php/update [R=307]

作为参考,RewriteRule结尾的[R=307]表示浏览器会看到URL被重写,但这是一个临时重定向。

谢谢您的回答。你的回答是否意味着这不能通过一个匹配来完成?嗨。我并没有真正使用RedirectMatch,我只是觉得这是一个很好的选择。由于RedirectMatch使用PCRE,因此对字符串求反变得很棘手-负前瞻是最好的选择。或许可以尝试以下匹配:^/软件/web/app.php/update.*?不要把它作为一个答案,因为我不能用RewriteMatch测试它,但当我通过grep运行它时,它会工作。为了只匹配app.php中的站点,我这样做了:RedirectMatch^/software/web/app.php/update?=/software/web/app.php.*h*tp://abc.de/software/web/app.php/update或类似于您建议的mod_rewrite:RewriteCond%{REQUEST_URI}上的RewriteEngine^/software/web/app\.php/update$RewriteCond%{REQUEST_URI}^/software/web/app\.php.*$RewriteRule.*/software/web/app.php/update[R=307]这样所有其他文件jpg、css、js都可以正常工作。谢谢你的帮助!更简单:重定向匹配^/software/web/app.php/更新。*http://abc.de/software/web/app.php/update