【问题标题】:Using .htaccess to change directory in url使用 .htaccess 更改 url 中的目录
【发布时间】:2013-05-15 08:03:04
【问题描述】:

我正在尝试使用.htaccess 将地址栏中显示的网址从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/

在我的 RewriteRule 之前。我试过的都没有用,显示的网址仍然是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

我已尝试在此文件中添加我的 RewriteRule,但仍然没有任何乐趣。

【问题讨论】:

    标签: .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    这里的问题是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]
    

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

    RewriteRule ^blog/(.*)$ /services/$1 [L,R]
    

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

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

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

    【讨论】:

    • 感谢您的回复。添加R 无效。今天早上我突然意识到,因为博客部分是 WordPress,所以博客目录有自己的 .htaccess 文件。这是它的内容:&lt;IfModule mod_rewrite.c&gt; RewriteEngine On RewriteBase /blog/ RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /blog/index.php [L] &lt;/IfModule&gt;
    • @ACordry 如果/blog/目录有自己的htaccess文件,那么它将取代父htaccess中的规则,你需要在/blog/htaccess中添加第二条规则 wordpress 规则,但稍作修改:RewriteRule ^(.*)$ /services/$1 [L,R],虽然这是 wordpress,但所有这些都不太可能奏效。最好将 /blog/ 重命名为 /services/ 并完成它。
    • 抱歉,我的原始问题中没有包含 wordpress 信息。你是对的,它没有工作。感谢您的帮助。
    【解决方案2】:

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

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

    如果你不这样做,尽管你有 .htaccess,WP 内部重写将使用你的安装目录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      相关资源
      最近更新 更多