Apache重写以删除不起作用的特定路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache重写以删除不起作用的特定路径相关的知识,希望对你有一定的参考价值。

我们正在建立一个新网站,但仍将引用我们之前网站上的一些旧网页,现在将在域名之后获得/_old路径。我想用Rewrite删除它。我试过了:

RewriteCond %{HTTP_HOST} ^www.mysite.edu$ [NC]
RewriteRule ^_old(/.*|)$ $1 [L,NC,R]

但是,然后我访问www.mysite.edu/_old/test它没有按预期重写到www.mysite.edu/test

我做错了什么?

答案

首先,你的代码应该在你给定的测试中做你期望的,除非你没有把RewriteEngine on放在顶部,如果它在那里,这意味着你可能需要清除浏览器缓存或者你的服务器上没有启用mod_rewrite,最后你可以在没有www的情况下提出请求,您的规则将仅与www的请求相匹配。

所以,我会给你两个建议,如果你已经做了以前的步骤,你可以选择适合你的东西,首先这个代码:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mysite.edu$ [NC]
RewriteRule ^_old/?(.*)$  /$1 [L,NC,R=301]

上面的代码将重定向以_old开头的所有内容,如果在_old之后没有任何内容,或者只有/,它将转到主根目录。

如果要使用上面的代码,请确保从URI中删除_old时,每个请求都有相同的路径。

另一个建议是,如果您只想在外部重定向,然后在内部使用相同的路径,请用以下代码替换该代码:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mysite.edu$ [NC]
RewriteCond %{THE_REQUEST} _old
RewriteRule ^_old/?(.*)$  /$1 [L,NE,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/_old%{REQUEST_URI}  -f
RewriteRule ^(.*)$  /_old/$1 [L,NE]

以上是关于Apache重写以删除不起作用的特定路径的主要内容,如果未能解决你的问题,请参考以下文章

替换或删除后台堆栈上现有片段的代码不起作用

添加代理通行证后,apache重写规则不起作用

从 Apache 2,2 迁移到 Apache 2.4 后,URL 重写不起作用

当 REQUEST_URI 不以不同的模式开头时,Htaccess 重写规则不起作用

xampp apache重写不起作用

HTTP 到 HTTPS Apache 重写不起作用