htaccess 301重定向和重写网址

时间:2013-02-12 10:25:09

标签: regex apache mod-rewrite http-status-code-301

我刚移动了一个网站,一些旧网页仍在浏览中。以下是旧网址结构的示例:

http://mydomain.com/text_version/personal_and_people_development.php

我希望它如何重定向到:

http://mydomain.com/personal-and-people-development/

我想要它做的是301重定向文件夹/text_version/中的任何页面,方法是删除/text_version路径,将所有下划线转换为连字符并替换.php文件扩展名带有斜线。

另请注意,我允许用户使用www.子域名,以后可能需要https://访问权限。

是否可以像这样进行文件夹广301重定向,还是必须指定每个页面?如果是这样,有人会给我一个指针,因为我对mod_rewriteregex不太满意。

更新:由于将其他人的代码串联在一起,这是我迄今为止拼凑起来的。它存储在.htaccess子文件夹中的/text_version文件中。

Options +FollowSymlinks
RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule !.*\.php$ %{REQUEST_FILENAME}.php [L, QSA]

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mydomain.com/$1/ [L,R=301]

RewriteRule (.*)_(.*) $1-$2 [N]

然而,这会转换:

http://mydomain.com/text_version/personal_and_people_development.php

http://mydomain.com/personal-and-people-development.php/

1 个答案:

答案 0 :(得分:0)

在经历了很多混乱之后,并没有理解其中的大部分内容,我设法将这个解决方案拼凑起来:

Options +FollowSymlinks
RewriteEngine on

RewriteBase /
RewriteRule (.*)_(.*) $1-$2 [N]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ .*\.php.*$
RewriteRule ^(.*)\.php(.*)?$ /$1$2 [R=301,L]

RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ ^(www.)?mydomain.com/$1/ [L,R=301]