我需要一些帮助来编写重写规则:我测试了很多东西,但我想我做错了。
我需要重写这种网址: 这是FROM网址:
http://website.com/a-section-a/a-section-b/a-section-c/99999-name-name2#
于: 这是TO网址:
http://website.com/index.php/newsection/99999-name-name2
我尝试了很多东西,但实际上我明白了:
RewriteRule /index.php/newsection/ \/([a-z]+([-]|[\/]))+
但不工作(重写引擎ON)。
编辑:网址应重定向到TO页面并重写。
答案 0 :(得分:1)
由于您的语法和/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-]+)
代表一个网址路径的一部分。它只匹配字母a-z(不区分大小写)和&数字0-9以及-
字符。 /
将每个路径部分指定为真实网址。(.*)?$
,它会抓住任何东西。$4
与正则表达式内容捕获的最后一个内容相匹配。[R,L,NC]
是Apache重写规则标志,等同于:R
表示重定向,L
表示规则集停止处理的最后含义& NC
表示将规则与“无案例”匹配(又名:不区分大小写)。答案 1 :(得分:-1)
尝试以下代码,
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]