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 2,2 迁移到 Apache 2.4 后,URL 重写不起作用