Mod_Rewrite帮助!

时间:2011-06-14 23:54:45

标签: .htaccess mod-rewrite

我一直在使用mod_rewrite并且喜欢它。但是,我有点难过该做什么。这就是我想要做的事情:

我有该网站的移动版本,我打算将http://myflashpics.com/user/flashpics重定向到http://myflashpics.com/mobile/user/flashpics

这是我的代码:

RewriteRule user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule user/(.*)$ viewer/index.php?profile=$1

RewriteRule mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule mobile/user/(.*)$ mobile/index.php?user=$1

但是当转到移动版时,它会显示桌面版?怎么了?

谢谢, 库尔顿

3 个答案:

答案 0 :(得分:2)

前两个RewriteRules的正则表达式也匹配您的移动路径,因为user/(.*)/$只是测试模式是否在请求路径的末尾匹配。您应该将^添加到测试的开头,以便检查整个请求路径是否匹配,如下所示:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1

作为旁注,您还可以保存重写引擎一些麻烦,并将规则集减少到两个规则。我还会更新你的捕获表达式,因为你可能根本不看它们包含正斜杠:

RewriteRule ^user/([^/]*)/?$ /viewer/index.php?profile=$1

RewriteRule ^mobile/user/([^/]*)/?$ /mobile/index.php?user=$1

答案 1 :(得分:0)

您的第一条规则在移动规则之前匹配,因为它不限于在字符串开头发生的user/。使用^对其进行前缀以指示字符串的开头:

RewriteRule ^user/(.*)/$ /viewer/index.php?profile=$1
RewriteRule ^user/(.*)$ viewer/index.php?profile=$1

RewriteRule ^mobile/user/(.*)/$ /mobile/index.php?user=$1
RewriteRule ^mobile/user/(.*)$ mobile/index.php?user=$1

答案 2 :(得分:0)

我不太清楚你要做什么,但你可以像这样压缩你的.htaccess代码:

Options +FollowSymlinks -MultiViews
RewriteEngine On

RewriteRule ^user/(.*)/?$ /viewer/index.php?profile=$1 [L,NC,QSA]

RewriteRule ^mobile/user/(.*)/?$ /mobile/index.php?user=$1 [L,NC,QSA]