.htaccess url重写规则问题


.htaccess url rewrite rules problems

我需要一些帮助来写一个重写规则:我测试了很多很多东西,但我想我做错了什么

我需要重写这样的url:FROM url:

http://website.com/a-section-a/a-section-b/a-section-c/99999-name-name2#

:这是TO url:

http://website.com/index.php/newsection/99999-name-name2

我试了很多方法,但最终还是成功了:

RewriteRule /index.php/newsection/ '/([a-z]+([-]|['/]))+

但不工作(重写引擎)。

编辑:url应该重定向到to页并重写。

由于您的语法和/index.php/的奇怪位置,您的重写规则应该如何工作有点不清楚,但尝试使用这个:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)/([a-z0-9-]+)/(.*)?$ /index.php/newsection/$4 [R,L,NC]

为了让您理解它是如何工作的,RewriteEngine On只是告诉Apache在规则集中打开重写规则引擎。RewriteCond %{REQUEST_FILENAME} !-f确保规则只在没有相同名称的文件时生效。类似地,RewriteCond %{REQUEST_FILENAME} !-d确保如果没有同名的目录,该规则不会生效。

现在实际的RewriteRule分解如下:

  • 每个([a-z0-9-]+)代表URL路径的一段。它只匹配字母a-z(不区分大小写)&数字0-9以及-字符。
  • /像真正的URL一样指定每个路径部分。
  • 路径的最后一部分是(.*)?$,它将捕获任何东西。
  • 与URL匹配的regex内容过去的区域是重定向目的地,$4匹配regex内容捕获的最后一件事。
  • [R,L,NC]是Apache重写规则标志,等同于:R意味着重定向,L意味着最后意味着规则集停止处理&NC表示匹配"no case"(即:大小写不敏感)的规则。

尝试下面的代码,

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite.com
RewriteRule (.*) http://www.yoursite.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.html HTTP/
RewriteRule ^index.html$ http://www.yoursite.com/ [R=301,L]