我一直在使用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
但是当转到移动版时,它会显示桌面版?怎么了?
谢谢, 库尔顿
答案 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]