0

我在我的网站上重命名了一个目录。如何将所有现有网址重定向到新网址。

例如,我将“MyFolder”重命名为“mydirectory”。那么,如何将 http://mywebsite.com/MyFolder/somepage.html 重定向http://mywebsite.com/mydirectory/somepage.htmlhttp://mywebsite.com/MyFolder/anotherpage.htmlhttp : //mywebsite.com/mydirectory/anotherpage.html等在 .htaccess 文件中使用一些规则。

以下是我的 .htaccess 文件的内容。它与 WordPress 的其他一些规则有关。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

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

</IfModule>

# END WordPress

所以RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]应该根据我的知识工作。但它不起作用。

有趣的是,以下规则解决了我的问题。但我想学习如何。

Redirect 301 /Wordpress/ http://example.com/wordpress/

请让我知道这是如何工作的。

4

1 回答 1

0

你有几个问题。

在 .htaccess 中匹配 URL 时,重要的是要记住您在 RewriteRule 中匹配的值是相对路径,而不是完整的 URI(即它不包括根斜杠)。您可以删除它,也可以将其设为可选,以使您的代码可在 VirtualHosts 和 .htaccess 之间传输

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

你的第二个问题是你有一个匹配所有 URL 的 RewriteRule 并且在你的新规则之前有 L 标志。L 标志使其成为最后处理的规则,因此永远不会触发您的新 RewriteRule,将其移至 RewriteBase 之后。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

最后我不太明白(但可能是由于你创建了一个虚构的例子)是,如果你移动了 Wordpress 目录,你将看不到你的 Wordpress .htaccess 文件中的重定向,因为对旧的请求如果移动了路径,它将不会命中文件。

于 2012-11-15T13:44:53.607 回答