使用.htaccess更改url中的目录

使用.htaccess更改url中的目录,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我正在尝试使用.htaccess将地址栏中显示的url从mysite.com/blog/wedding hair/更改为mysite.com/services/wedding hair/ 使用以下来源的答案: 我添加到.htaccess文件中。这是.htaccess文件,我添加了上一个重写规则: Options -Indexes RewriteEngine on RewriteCond %{HTTP_HOST} ^mysite.com$ RewriteRule ^/?$ &quo

我正在尝试使用
.htaccess
将地址栏中显示的url从
mysite.com/blog/wedding hair/
更改为
mysite.com/services/wedding hair/

使用以下来源的答案:

我添加到
.htaccess
文件中。这是
.htaccess
文件,我添加了上一个重写规则:

Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.com$
RewriteRule ^/?$ "http\:\/\/www\.mysite\.com" [R=301]
RewriteRule ^blog/(.*)$ /services/$1 [L]
非www重定向有效,但博客服务重写无效。我想也许我把目录名颠倒了,但是改变它们也不管用。我尝试过在所有不同的组合中添加和删除目录名周围的/。我试着加上

RewriteCond %{THE_REQUEST} ^GET\ /blog/
在我的规则之前。我尝试过的一切都不起作用,显示的url仍然是
mysite.com/blog/widding hair/

我相信这对某些人来说是非常直截了当的,但我无法做到这一点。任何帮助都将不胜感激

当我昨天在做这个的时候,我没有想到博客目录是WordPress安装的。以下是blog目录中的.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写库/博客/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/blog/index.php[L]
#结束WordPress

我已经尝试将我的RewriteRule添加到此文件中,但仍然没有乐趣。

这里的问题是,
RewriteRule^blog/(.*)$/services/$1[L]
在内部重写URI,以便浏览器不知道它正在发生,这完全发生在服务器端。如果您希望浏览器实际加载不同的URL,则需要像在www重定向中一样使用
R
标志,尽管它只是将请求重定向到root用户。如果您希望它重定向所有内容以包含“www”,则需要如下内容:

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
然后,要将“blog”重定向到“services”,只需添加
R
标志(或者
R=301
,如果您希望重定向是永久性的)

而且,如果出于任何原因,您的内容实际上不在/blog/,您需要在内部将其重写回来

RewriteCond %{THE_REQUEST} ^GET\ /services/
RewriteRule ^services/(.*)$ /blog/$1 [L]

但只有当您的内容确实位于
/blog/
时,才需要这样做,但您只想让它看起来位于
/services/

实际上,在这种情况下,由于您在Wordpress选项中有一个特定字段来处理不同url的显示,因此无法使用它。htaccess是Wordpress规则在最后执行

在常规设置中使用“站点地址(URL)”字段并输入“mysite.com/services/”会简单得多


如果您不这样做,尽管您有.htaccess,WP内部重写将使用您的安装程序库

谢谢您的回复。添加
R
无效。今天早上我才明白,因为博客部分是WordPress,所以博客目录有自己的.htaccess文件。以下是它的内容:
RewriteEngine On RewriteBase/blog/RewriteRule^index\.php$-[L]RewriteCond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则/blog/index.php[L]
@ACordry如果
/blog/
目录有自己的htaccess文件,那么它将取代父htaccess中的规则,您需要将第二条规则添加到wordpress规则上方的
/blog/
htaccess中,但稍作修改:
重写规则^(.*$/services/$1[L,R]
,虽然这是wordpress,但所有这些都不太可能起作用。您最好将
/blog/
重命名为
/services/
,然后完成。很抱歉,我的原始问题中没有包含wordpress信息。你是对的,它不起作用。谢谢你的帮助。
RewriteCond %{THE_REQUEST} ^GET\ /services/
RewriteRule ^services/(.*)$ /blog/$1 [L]