mod_rewrites.htaccess不适用于godaddy主机(linux)



在我的站点www.sqcp.com上,在另一台linux服务器上进行测试时,一切都正常工作。然而,自从将其移到godaddy后,mod_rewrites就一直无法工作,因此其他页面都无法访问。即使我在中创建了一个空白目录/文件夹,它试图将url整理到其中,也适用于该页面(显然不是一个修复方法)。

因此,在我的.htaccess文件中,任何帮助都会很好。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ / [L,R=301]
    RewriteRule (.*)/{2,}$ /$1/ [L,R=301]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{THE_REQUEST} ^GET /[^?s]+.php
    RewriteRule (.*).php$ /$1/ [L,R=301]
    RewriteRule ^(.*)/(d{4}-d{2}-d{2}-[a-zA-Z0-9-_]+)$ $1?s=$2 [L]
    RewriteRule ^(.*/)?staff.php/([a-zA-Z0-9-_]+) $1staff.php?s=$2 [L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule (.*)/$ $1.php [L] 
    RewriteCond %{REQUEST_FILENAME}/index.php !-f
    RewriteRule (.*)/$ $1 [L] 
</IfModule>

Godaddy运行着一个非常好的共享托管服务,解决了一个庞大的市场领域——那些想要一个活动站点(即使用一些脚本)的用户,但不需要支付费用或复杂性,也不需要拥有管理自己的Linux虚拟机的专业知识。这不是GoDaddy的问题。这是你的。

因此,首先通过运行phpinfo脚本来了解您正在运行的环境,并确保它创建了您使用的变量。就我在你的例子中所见:

规则1-3是301重定向,以强制执行某些请求命名约定。

  • 规则1将/index.php重定向到/
  • 规则2将尾随的多个/折叠为单个/
  • 规则3将*.php的GET请求重写为*.php/

规则4-6将公共URI映射到内部URI

  • 规则4将/*/yyyy-mm-dd-word重写为*?s=yyyy-mm-dd-word(注意没有QSA)
  • 规则5似乎试图将/*/staff.php/word重写为/*/staff.php?s=word,但语法错误
  • 规则6在重定向时用.php替换任何尾随的/
  • 规则7去掉任何尾随的"/",除非uri是一个带有index.php的目录(我假设你假设的是DirectoryIndex index.php(GoDaddy是这样吗?)

这一切都是令人绝望的困惑。您是否隐藏或暴露了.php扩展?因为规则3、5和6不一致。第5条规则似乎更符合

RewriteRule ^(.*?)/staff.php/([a-zA-Z0-9-_]+) $1/staff.php?s=$2 [L]

回到绘图板上,计算出你试图用你的htaccess规则做什么;您希望您的公共URI语法是什么;脚本的布局方式;您希望传递回客户端浏览器的重定向,希望Apache作为内部重写处理的重定向,以及需要哪些额外条件来防止循环和不匹配。确保这是有意义的,然后通过一次一个规则地构建.htaccess文件并使用测试请求依次练习每个规则来验证它的作用来调试它们。

尝试在htaccess文件的开头添加以下内容。我在GoDaddy上也遇到了同样的问题,它在其他地方都有效:

Options -Multiviews

最新更新