我需要一些帮助来写一个重写规则:我测试了很多很多东西,但我想我做错了什么
我需要重写这样的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]