我正在尝试使用.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-htaccess,rewrite a folder name using .htaccess和Replace 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,但仍然没有快乐。
答案 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内部重写将使用你的安装库