mod_rewrite禁用旧链接

时间:2012-10-13 21:47:50

标签: .htaccess mod-rewrite

我的public_html里面有一个文件夹“journals”。所以我的链接是这样的:

site/journals/index.php/journal1site/journals/index.php/journal2等(journal1,journal2只是插图。可能是技术,艺术等。)

我(在Jon的帮助下).htaccess使site/journals/index.php/journal1显示为site/index.php/journal1

但我仍然可以访问/查看 - site/journals/index.php/journal1

我想停用site/journals/index.php/journal1,只有site/index.php/journal1可见。请让我知道我该怎么做。

请查看this了解详情。

这是root(/)文件夹中现有的.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/sunder
RewriteRule ^index\.php(.*)$ /sunder/index.php$1? [L]
</IfModule>

2 个答案:

答案 0 :(得分:0)

约翰给你的规则是不正确的。我们来看看:

您需要的是重写example.com/index.php/journal1等网址以指向/journals/index.php/journal1的规则。因此,您必须注意不要过度匹配和重写。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteRule ^journals/(.*)$ http://example.com/$1 [R=301,L]

    RewriteRule ^index\.php/(.*)$ /journals/index.php/$1 [L]
</IfModule>

重写网址的示例:

example.com/index.php/journal2 => /home/bane/htdocs/journals/index.php/journal2

example.com/index.php/foo/bar  => /home/bane/htdocs/journals/index.php/foo/bar

答案 1 :(得分:0)

  

我想禁用site / journals / index.php / journal1,只有site / index.php / journal1应该可见。请让我知道我该怎么做。

由于您要禁用对旧URL的访问(同时仍在内部重写它们),您需要匹配实际请求而不仅仅是URI。如果您匹配URI并执行重定向,则重定向将在内部重写,这将与其他规则匹配并再次重定向,从而导致您的浏览器抱怨该页面未正确重定向。

尝试在您已有的规则(在您的问题中)中的RewriteEngine On 下添加这些规则

RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD)\ /sunder/([^\ ]+)
RewriteRule ^ /%2 [L,R=301]

仅当实际请求是针对以/sunder/开头的内容时,才会应用此选项,并且会将浏览器重定向到已删除的网址。