我在子域中构建了一个移动网站。 我已成功实现了重定向302:
www.domain.com to m.domain.com in htaccess.
我现在要实现的目标是重定向用户:
www.domain.com/internal-page/ > 302 > m.domain.com/internal-page.html
请注意,桌面和移动设备的网址名称不一样。 我正在使用的代码如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# Mobile Redirect
# Verify Desktop Version Parameter
RewriteCond %{QUERY_STRING} (^|&)ViewFullSite=true(&|$)
# Set cookie and expiration
RewriteRule ^ - [CO=mredir:0:www.domain.com:60]
# Prevent looping
RewriteCond %{HTTP_HOST} !^m.domain.com$
# Define Mobile agents
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|palm|series60|palmsource|pocketpc"[NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|android"[NC]
# Verify if not already in Mobile site
RewriteCond %{HTTP_HOST} !^m\.
# We need to read and write at the same time to set cookie
RewriteCond %{QUERY_STRING} !(^|&)ViewFullSite=true(&|$)
# Verify that we previously haven't set the cookie
RewriteCond %{HTTP_COOKIE} !^.*mredir=0.*$ [NC]
# Now redirect the users to the Mobile Homepage
RewriteRule ^$ http://m.domain.com [R]
RewriteRule $/internal-page/ http://m.domain.com/internal-page.html [R,L]
答案 0 :(得分:0)
最后,您有两条RewriteRule
行我相信应该更改为:
RewriteRule ^\/?$ http://m.domain.com [R=302]
RewriteRule ^\/?(.*)\/?$ http://m.domain.com/$1.html [R=302,L]
^\/?(.*)\/?$
表示给我一个从头开始的字符串( ^ )并给我所有字符((。*))直到结束( $ )没有尾随/开头( / ),如果有的话(?)。
http://m.domain.com/$1.html
表示如果地址为http://www.domain.com/internal-page/
,则会变为http://m.domain.com/internal-page.html
。
[R=302,L]
应表示302重定向( R = 302 )和最后一次重写( L ),因此我们的网址上不会发生其他重写
修改强>
我相信,对于 RewriteRules ,如果网址只是域名,则第一个重定向到http://m.domain.com
,但如果还有其他内容则第二个重写失败,因为它实际上不是字面/internal-page/
,你需要一个正则表达式变量放入新的URL。
编辑(2):
要从特定桌面页面重定向到每个移动页面:
RewriteRule ^\/foo\/?$ http://m.domain.com/bar.html [R=302]
RewriteRule ^\/hello\/?$ http://m.domain.com/world.html [R=302]
( /?)表示 / 在该位置是可选的,( ^ )表示开头且( $ )表示在这种情况下结束( ^ 也可用于表示类似[^\.]
的内容,这意味着 除了 a period)。
只需将连续需要的许多内容放入重定向中即可。为了确保没有误解,第一行意味着http://www.domain.com/foo/
将成为http://m.domain.com/bar.html
,并且因为尾部斜杠是可选的http://www.domain.com/foo
(注意没有尾随斜杠)也会重定向到http://m.domain.com/bar.html
。
您可以稍微使用语法来自定义它,但希望我已经指出了正确的方向。如果您还有其他需要,请告诉我,我会尽力协助您。
我不想听起来像是破纪录或任何东西,但我觉得我不能在良心的情况下结束这个编辑而没有指出修改移动网站将是一个更好的方法来做到这一点。如果不可能,或者您觉得一些静态重定向与修改某些页面并不是一件大事,那么我完全理解,但这里有一些让您思考的事情:
如果移动站点和桌面站点位于不同的文件夹中,那么完全相同的名称方案可用于使重写更简单,并且意味着当添加新页面/内容时,您将不需要更多重写语句(进行更多重写)意味着您必须创建新页面,然后您必须创建重定向。这是额外的工作和更多需要您注意的文件。)
如果移动网站实际上是从与桌面网站相同的目录托管,那么更改其中一个或另一个的文件,使其变为/desktop-foo/
或/d-foo/
,那么很容易使重写(重定向)转到/m-foo.html
之类的内容。您可以放弃修改桌面版页,并使/foo/
成为/m-foo.html
,并使所有移动版本以“m”开头。
想到的第三个选项是最困难和最耗时的,取决于网站的内容,但它是一个非常酷的,最终将使网站最容易工作(在最初的工作后,当然)。无需使用mod_rewrite或单独的页面,就可以在桌面,移动设备,平板电脑等上使用相同的页面。像CSS中的媒体查询之类的东西允许您根据客户端查看的内容来更改页面的外观。我之前遇到过关于这个主题的教程,它使用媒体查询和屏幕的最大宽度来确定页面的外观。这需要现在的大量工作,但如果你能够应对挑战,可以节省一些麻烦,并且是一种有趣的学习体验。
再次,对不起,这最终偏离了主题,但我从你原来的问题和你的回答中得到的印象是,如果你还没有考虑过并且已经解雇他们,即使替代你不感兴趣,你不会像某些人一样回应,“嘿,$ *%&amp;你,伙计!我要求重写不是所有其他垃圾!”我希望你把它当成它的目的......有用。