Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写.htaccess规则,在更改目录名后将所有url重定向到新url?_.htaccess - Fatal编程技术网

如何编写.htaccess规则,在更改目录名后将所有url重定向到新url?

如何编写.htaccess规则,在更改目录名后将所有url重定向到新url?,.htaccess,.htaccess,我在我的网站上重命名了一个目录。如何将所有现有URL重定向到新URL 例如,我将“MyFolder”重命名为“mydirectory”。那么,如何使用.htaccess文件中的一些规则重定向到和等 以下是my.htaccess文件的内容。这是WordPress的一些其他规则 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] R

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

例如,我将“MyFolder”重命名为“mydirectory”。那么,如何使用.htaccess文件中的一些规则重定向到和等

以下是my.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

请告诉我这是如何工作的。

您有一些问题

在.htaccess中匹配URL时,请务必记住,在重写规则中匹配的值是相对路径,而不是完整URI(即,它不包括根斜杠)。您可以删除它,也可以将其设置为可选,以使您的代码在VirtualHosts和.htaccess之间进行转换

RewriteRule ^/?Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]
第二个问题是,您有一个与所有URL匹配的重写规则,并且在新规则之前有L标志。L标志使其成为最后一个处理的规则,因此您的新重写规则永远不会被触发,请将其移动到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/(.*)$http://example.com/wordpress/$1[R=301,L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

最后,我不太明白的是(可能是因为您创建了一个虚构的示例),如果您移动了Wordpress目录,您将看不到在您的Wordpress.htaccess文件中有重定向,因为对旧路径的请求在移动时不会命中该文件

首先,您需要将规则放在word press rule
RewriteRule之前/index.php[L]
,其次,您需要删除规则中的第一个斜杠:
重写规则^Wordpress/(*)$http://example.com/wordpress/$1[R=301,L]
(如果您正在重定向到同一个域,则不需要
http://example.com
part)
# 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