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

问题描述 投票:0回答:1

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

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

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

我做错了什么?

apache mod-rewrite
1个回答
0
投票

首先,你的代码应该在你给定的测试中做你期望的,除非你没有把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]
© www.soinside.com 2019 - 2024. All rights reserved.