.htaccess url重写规则问题

时间:2014-06-30 09:14:16

标签: php apache .htaccess mod-rewrite url-rewriting

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

我需要重写这种网址: 这是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页面并重写。

2 个答案:

答案 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以及-字符。
  • /将每个路径部分指定为真实网址。
  • 路径的最后一部分是(.*)?$,它会抓住任何东西。
  • 与URL匹配的正则表达式内容的区域是重定向目标,其中$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]