我在我的网站上重命名了一个目录。如何将所有现有网址重定向到新网址。
例如,我将“MyFolder”重命名为“mydirectory”。那么,如何使用.htaccess文件中的某些规则将http://mywebsite.com/MyFolder/somepage.html重定向到http://mywebsite.com/mydirectory/somepage.html和http://mywebsite.com/MyFolder/anotherpage.html到http://mywebsite.com/mydirectory/anotherpage.html等。
以下是我的.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/
请告诉我这是如何运作的。
答案 0 :(得分:0)
你有一些问题。
在.htaccess中匹配网址时,请务必记住您在RewriteRule中匹配的值是相对路径,而不是完整的URI(即它不包含根斜杠)。您可以将其删除,也可以将其设置为可选,以使您的代码可以在VirtualHosts和.htaccess之间转移
RewriteRule ^/?Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]
你的第二个问题是你有一个RewriteRule匹配所有的URL并且在你的新规则之前有一个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文件中的重定向,因为请求如果它被移动,旧路径将不会命中该文件。