1

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

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

我有(在乔恩的帮助下).htaccess 正在site/journals/index.php/journal1显示为.htaccess site/index.php/journal1

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

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

请检查以获取更多信息。

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

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

2 回答 2

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/内容并将浏览器重定向到已删除的 URL 的情况。

于 2012-10-14T03:42:43.443 回答
0

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

您需要的是一个规则来重写 URL,比如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>

重写 URL 的示例:

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
于 2012-10-13T22:05:48.840 回答