.htaccess RewriteRule用于多个页面

时间:2012-08-12 09:05:39

标签: regex .htaccess

我在网站上为索引页面完成了RewriteRule。

以下是代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([a-zA-Z0-9+\-\(\)]+)/?$ /index.php?origin=$1
RewriteRule ^([a-zA-Z0-9+\-\(\)]+)/([a-zA-Z0-9+\-]+)/?$ /index.php?origin=$1&gender=$2
RewriteRule ^([a-zA-Z0-9+\-\(\)]+)/([a-zA-Z0-9+\-]+)/([a-zA-Z0-9+\-]+)/?$ /index.php?origin=$1&gender=$2&type=$3
RewriteRule ^([a-zA-Z0-9+\-\(\)]+)/([a-zA-Z0-9+\-]+)/([a-zA-Z0-9+\-]+)/([a-zA-Z0-9+\-]+)/?$ /index.php?origin=$1&gender=$2&type=$3&page=$4
</IfModule>

并且网址看起来像

http://babynames.agurchand.com/scottish/male/pythagorean

这是一个单页网站,所以到目前为止一切正常。 然后我想在我的网站上再添加一页,我也添加了。文件名是'namemeaning.php'。

我在底部添加了下面的代码以及粘贴的htaccess。但它似乎没有起作用。

RewriteRule ^/namemeaning/([a-zA-Z0-9+\-\(\)]+)/?$ /namemeaning/namemeaning.php?name=$1

我已尝试使用以下网址,但我仍然只被引用到索引页面。

http://babynames.agurchand.com/namemeaning/abasi

任何人都可以为我提供解决方案!

2 个答案:

答案 0 :(得分:1)

您正被转发到索引页面,因为索引页面的正则表达式符合您的请求。你被发送到index.php?origin = namemeaning&amp; gender = abasi

http://babynames.agurchand.com/namemeaning/abasi
'namemeaning' fits the rule ([a-zA-Z0-9+\-\(\)]+)
'abasi' fits the rule ([a-zA-Z0-9+\-]+)

一个简单的解决方法是添加行

RewriteRule ^/namemeaning/([a-zA-Z0-9+\-\(\)]+)/?$ /namemeaning/namemeaning.php?name=$1

以上

RewriteRule ^([a-zA-Z0-9+\-\(\)]+)/?$ /index.php?origin=$1

您应该记住始终将最具体的RewriteRule置于更一般的那些之上。

有关正则表达式的更多信息,我可以建议您this website

答案 1 :(得分:0)

从上到下依次检查重新排序规则,并按顺序应用所有匹配的规则。仔细检查您的规则是否与所需规则匹配。 用于此目的的好工具是http://www.regextester.com/