使用.htaccess更改url中的目录

时间:2013-05-20 17:36:06

标签: .htaccess mod-rewrite url-rewriting

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

使用以下答案: https://stackoverflow.com/questions/8713319/assigning-different-name-to-existing-folder-in-url-in-htaccessrewrite a folder name using .htaccessReplace directory name in url with another name我已添加到.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,但仍然没有快乐。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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