0

我刚刚移动了一个站点,并且仍在查看一些旧页面。这是旧 url 结构的示例:

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_rewriteor regex

更新:由于将其他人的代码串在一起,这是我迄今为止设法拼凑的。这存储在.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/
4

1 回答 1

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]
于 2013-02-12T11:29:19.100 回答