【问题标题】:htaccess 301 redirect and rewrite urlshtaccess 301 重定向和重写 url
【发布时间】:2013-01-27 15:01:52
【问题描述】:

我刚刚移动了一个站点,并且仍在查看一些旧页面。以下是旧 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_rewriteregex

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

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/

【问题讨论】:

  • @faa 我在发布时没有该代码。但现在我已经猜到了。
  • 很高兴您找到了方法。这就是我删除之前评论的原因。

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


【解决方案1】:

在搞了很多乱七八糟之后,大部分都没有理解,我设法拼凑出这个解决方案:

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]

【讨论】:

  • 我不确定最后两行是否有效。这部分^(www.)?mydomain.com/$1/ 不是正则表达式,而是作为替换 URL 的一部分发送的。另一方面,根据!(.*)/$,传入的 URL 不能有任何路径,因此反向引用 $1 正在捕获一个空字符串。我认为你应该测试这些线。你可以做到here
  • @faa 在该站点的奇怪行为,但在我的浏览器 chrome +ie8 中有效
  • @faa 测试人员不支持%{THE_REQUEST}
猜你喜欢
  • 2016-09-28
  • 2013-12-21
  • 2015-03-04
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多