使用 .htaccess 更改 url 中的目录

4 .htaccess mod-rewrite url-rewriting

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

使用以下答案:

我添加到.htaccess文件中。这是.htaccess文件,我添加了最后的重写规则:

Options -Indexes
RewriteEngine on
RewriteCond %{HTTP_HOST} ^mysite.com$
RewriteRule ^/?$ "http\:\/\/www\.mysite\.com" [R=301]
RewriteRule ^blog/(.*)$ /services/$1 [L]
Run Code Online (Sandbox Code Playgroud)

非 www 重定向有效,但博客服务重写无效。我想也许我把目录名称颠倒了,但改变它们也不起作用。我尝试过在所有不同的组合中添加和删除目录名称周围的 / 。我尝试添加

RewriteCond %{THE_REQUEST} ^GET\ /blog/
Run Code Online (Sandbox Code Playgroud)

在我的重写规则之前。我尝试过的任何方法都不起作用,显示的网址仍然存在mysite.com/blog/wedding-hair/

我确信这对某人来说是相当简单的,但我无法得到正确的结果。任何帮助,将不胜感激。

当我昨天处理这个问题时,我没有想到博客目录是 WordPress 安装的事实。这是博客目录中的 .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
Run Code Online (Sandbox Code Playgroud)

我尝试在这个文件中添加我的 RewriteRule 但仍然不高兴。

Jon*_*Lin 5

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

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

然后要将“博客”重定向到“服务”,只需添加该R标志(或者R=301如果您希望重定向是永久性的)。

RewriteRule ^blog/(.*)$ /services/$1 [L,R]
Run Code Online (Sandbox Code Playgroud)

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

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

但这仅适用于您的内容确实位于/blog/,但您只想让它看起来位于/services/