在我的网站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>
答案 0 :(得分:1)
Godaddy运行一个非常好的共享托管服务,解决了一个大型市场领域 - 想要一个活跃网站(有一些脚本)但没有支付或拥有专业知识来管理他们自己的Linux的成本或复杂性的用户VM。这不是GoDaddy问题。它是你的。
首先,通过运行phpinfo
脚本来了解您正在运行的环境,并确保它创建您使用的变量。就我的例子而言,我可以看到:
规则1-3是301重定向,以强制执行某些请求命名约定。
/index.php
重定向到/
/
折叠为单个/
*.php
到*.php/
规则4-6将公共URI映射到内部URI
/*/yyyy-mm-dd-word
重写为*?s=yyyy-mm-dd-word
(请注意无QSA)/*/staff.php/word
重写为/*/staff.php?s=word
,但语法错误。/
的任何尾随.php
DirectoryIndex index.php
(这是GoDaddy的情况吗?)这一切都无可救药地混淆了。您是否隐藏或公开.php
扩展程序?因为规则3,5和6不一致。
RewriteRule ^(.*?)/staff.php/([a-zA-Z0-9\-_]+) $1/staff.php?s=$2 [L]
回到绘图板,找出你想要用你的htaccess规则做的事情;你想要的公共URI语法是什么;你的脚本是如何布局的;什么重定向你想要传递回客户端浏览器,你希望Apache作为内部重写处理,以及需要什么额外条件来防止循环和失火。确保这是有意义的,然后通过一次构建一个.htaccess
文件并使用测试请求依次行使每个规则来验证它的作用来调试它们。
答案 1 :(得分:0)
尝试在htaccess文件的开头添加以下内容。我有同样的问题让重写工作在其他地方工作的GoDaddy:
Options -Multiviews