如何重定向/阻止旧URL

时间:2017-12-27 14:02:46

标签: php .htaccess

我创建了我的.htaccess文件

Options +FollowSymlinks -Indexes
RewriteEngine On
RewriteRule ^login/$ views/sessions/login.php [L]
RewriteRule ^([a-zA-Z]+)/$ views/sessions/$1.php [L]
.... (a dozen line of rewriting)

我网站上的链接的工作方式如下:

mysite.com/login/访问mysite.com/views/sessions/login.php

但现在我想阻止访问旧链接。 当用户转到mysite.com/views/sessions/login.php时,会返回404错误或将其直接返回到链接mysite.com/login/

如何屏蔽旧网址?

我添加了[R = 301,NC,L](RewriteRule ^login/$ views/sessions/login.php [R=301,NC,L]

但是当我想访问mysite.com/views/sessions/login.php

我有这样的错误:"禁止您无法访问此服务器上的/C:/wamp/www/mysite/views/sessions/login.php。&#34

1 个答案:

答案 0 :(得分:1)

您可以在重写网址时添加一个查询字符串参数,请参阅以下代码。我添加了一个查询字符串参数来重定向url。

RewriteCond %{REQUEST_URI} !^/views/sessions/([a-zA-Z]+).php$ [NC]
RewriteRule ^(.*)/$ views/sessions/$1.php?s=old [L]

重定向旧网址:(旧网址将重定向到新网址)

RewriteCond %{QUERY_STRING} !^(.*&)?s=old$ [NC]
RewriteRule ^views/sessions/([a-zA-Z]+).php$ $1/ [R=302,NC,L]

阻止旧网址:(旧网址将被屏蔽)

RewriteCond %{QUERY_STRING} !^(.*&)?s=old$ [NC]
RewriteRule ^views/sessions/([a-zA-Z]+).php$ $1/ [R=401,NC,L]

修改(将查询字符串添加到新网址)

RewriteCond %{REQUEST_URI} !^/views/sessions/([a-zA-Z]+).php$ [NC]
RewriteRule ^(.*)/$ views/sessions/$1.php?%{QUERY_STRING}&s=old [L]
  

&s=old不是强制性的,只是为了应用阻止旧网址的条件。您可以使用任何变量而不是它,选择它,因为它不会影响您的程序逻辑。