mod_rewrites .htaccess不使用godaddy主机(linux)

时间:2012-01-26 08:53:40

标签: .htaccess mod-rewrite

在我的网站www.sqcp.com上测试另一台Linux服务器时,一切正常。然而,由于将它移动到godaddy,mod_rewrites没有工作,因此没有其他页面可访问。即使我在它试图整理网址的内容中创建一个空白目录/文件夹,然后适用于该页面(显然不是修复)。

所以我的.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>

2 个答案:

答案 0 :(得分:1)

Godaddy运行一个非常好的共享托管服务,解决了一个大型市场领域 - 想要一个活跃网站(有一些脚本)但没有支付或拥有专业知识来管理他们自己的Linux的成本或复杂性的用户VM。这不是GoDaddy问题。它是你的。

首先,通过运行phpinfo脚本来了解您正在运行的环境,并确保它创建您使用的变量。就我的例子而言,我可以看到:

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

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

规则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文件并使用测试请求依次行使每个规则来验证它的作用来调试它们。

答案 1 :(得分:0)

尝试在htaccess文件的开头添加以下内容。我有同样的问题让重写工作在其他地方工作的GoDaddy:

Options -Multiviews