.htaccess中的RewriteRule循环不起作用

时间:2012-08-13 15:25:10

标签: regex .htaccess mod-rewrite rewrite

我正在尝试为网站中的所有网页制作漂亮的链接, 我希望foo.com/services/domestic转到foo.com/index.php?page=services-domestic。我在.htaccess文件中有以下内容,它适用于上面的示例,但如果我尝试转到foo.com/services/domestic/case/1(期待/index.php?page=services-domestic-case-1),我会得到404。

# a/b/c/d -> a-b-c-d
RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9_-]+)$ $1-$2 [N]

# a-b-c-d -> index.php?page=a-b-c-d
RewriteRule ^([^(/|\.)]+)$ index.php?page=$1

我试过在没有标志的情况下重复[N]行三次无效。除了第一个深度之外,它不适用于任何其他方面。可能只是我的业余正则表达式,但我无法理解什么是破坏,任何想法?

2 个答案:

答案 0 :(得分:0)

试试这个:

RewriteRule ^([\w-]+)/([\w-]+)$ $1-$2 [N]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?page=$1

答案 1 :(得分:0)

看起来你只需要调整你的正则表达式并重写标志:

# a/b/c/d -> a-b-c-d
RewriteRule ^(.*)/(.*) /$1-$2 [L]

# a-b-c-d -> index.php?page=a-b-c-d
RewriteRule ^([^/.]+)$ /index.php?page=$1 [L]