1

我试图用我的 .htaccess 文件做一些不同的事情,但由于它对我来说还是有点新,所以我在让一切都按照我想要的方式做一些事情时遇到了一些麻烦。这就是我遇到的麻烦...

1) 我想针对移动设备重定向到我的移动站点,除非移动设备运行的是 Opera Mini。我试图解决这个问题,但它仍在重定向 Opera Mini。这是我必须重定向的内容(基于我从该站点获得的代码。此代码有效)

# Detect if the user is on a mobile device
RewriteCond %{HTTP_USER_AGENT} android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|opera\ mobi|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC,OR]
# If user is mobile, redirect to mobile site, preserving the remainder of the URL
# For example, http://www.triadbarspecials.com/barname redirects to http://m.triadbarspecials.com/barname
RewriteRule ^(.*)$ http://m.triadbarspecials.com/$1 [L,R=302,nc]

因此,我想确保 Opera Mini 始终定向到我的完整网站,因此我添加了以下代码:

# Detect if we're in Opera Mobile
RewriteCond %{HTTP_USER_AGENT} opera\ mini
# If so, make sure user is on the main site
RewriteRule ^(.*)$ http://www.triadbarspecials.com/$1 [L,R=302,nc]

任何人都可以看到那里发生了什么导致它无法直接到主站点吗?

2) 我设置了我的站点,以便用户可以在 URL 的 .com/ 部分之后键入一个栏的名称,如果该栏存在于我的站点上,.htaccess 会将用户路由到正确的页面。例如,triadbarspecials.com/justinsbar is the same as triadbarspecials.com/bars.php?barname=justinsbar

我的错误文档无法正常工作时遇到问题。如果用户键入我的站点上不存在的栏的名称,则 URL 仍会指向该页面,但不会显示动态内容,因为没有该名称的栏。triadbarspecials.com/只要用户键入的 URL 不存在,用户也会被定向到该页面以查找在其后键入的任何内容。这是我的代码...

# The following allows for URL's to be typed as just the bar's name
# for example, http://www.triadbarspecials.com/bars.php?barname=barname is changed to     http://www.triadbarspecials.com/barname
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ bars.php?barname=$1 [L]

我可以看到这段代码看起来很笼统,所以希望有人可以帮助支持这一点并使事情正确重定向。这是我的错误文档

ErrorDocument 400 /error.php?error=400
ErrorDocument 401 /error.php?error=401
ErrorDocument 403 /error.php?error=403
ErrorDocument 404 /error.php?error=404
ErrorDocument 500 /error.php?error=500

3) 我的 .htaccess 文件中有这段代码,但我完全忘记了它的作用。我不想只是删除它,所以希望有人能解释它的作用......

RewriteCond %{HTTP_HOST} ^triadbarspecials.com[nc]
RewriteRule ^(.*)$ http:#www.triadbarspecials.com/$1 [r=301,nc]

提前感谢任何可以提供帮助的人!

4

1 回答 1

1
  1. 根据此链接, Opera Mini的用户代理同时包含字符串“ opera mini ”和“opera mobi”,并且您在第一次重定向中与第二个匹配。这意味着您的“Opera mini”设备会被重定向到移动网站,而第二条规则将永远不会被应用。您应该摆脱第二个重定向并结合两个条件:

    # Detect if the user is on a mobile device
    RewriteCond %{HTTP_USER_AGENT} android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|opera\ mobi|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ (ce|phone)|xda|xiino [NC]
    # As long as it's NOT opera mini
    RewriteCond %{HTTP_USER_AGENT} !opera\ mini [NC]
    # If user is mobile, redirect to mobile site, preserving the remainder of the URL
    # For example, http://www.triadbarspecials.com/barname redirects to http://m.triadbarspecials.com/barname
    RewriteRule ^(.*)$ http://m.triadbarspecials.com/$1 [L,R=302,nc]
    
  2. 您必须检查该栏是否存在于您的bars.php脚本中。在该脚本中,如果barname参数请求的栏不存在,则将浏览器重定向到/error.php?error=404. 您不能在 mod_rewrite 中严格执行此操作,因为该规则不知道 barname 是否存在于您的数据库中。Mod_rewrite 没有对您的数据库的固有访问权限。

  3. 它将请求重定向到您的站点,其中www缺少从主机名到带有www. 因此,如果有人输入:

    http://triadbarspecials.com/somebar
    

    他们被重定向到:

    http://www.triadbarspecials.com/somebar
    
于 2012-12-18T23:38:28.393 回答