.htaccess MAMP与现场环境的区别

时间:2013-04-22 16:01:44

标签: .htaccess mod-rewrite mamp

我正在MAMP上构建我的网站,几天之后我终于得到一个.htaccess文件,按照我的意愿工作。但是现在当我上传到现场环境时,它表现不一样!有不同的版本吗?是不是因为我的文件中的错误导致MAMP自动处理?

如果不是这些特殊文件,则使用默认的RewriteRule。 scripts / images / mediacontent / services / robot.txt有效但 NOT(login.php,hybridauth,blog)

#start
Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# main site
RewriteCond %{REQUEST_URI} !^/scripts/(.*\.js)$
RewriteCond %{REQUEST_URI} !^/styles/(.*\.css)$
RewriteCond %{REQUEST_URI} !^/images/(.*\.jpg|.*\.png|.*\.gif)$
RewriteCond %{REQUEST_URI} !^/mediacontent/(.*\.jpg|.*\.png)$ [NC]
RewriteCond %{REQUEST_URI} !^/services/(.*\.php)$
RewriteCond %{REQUEST_URI} !^/login\.php$
RewriteCond %{REQUEST_URI} !^/hybridauth/$ 
RewriteCond %{REQUEST_URI} !^/blog/$ [NC]
RewriteCond %{REQUEST_URI} !^/robot.txt$ 

RewriteRule (\w+) index.php?page=$1 [NC,L]

2 个答案:

答案 0 :(得分:0)

使用\w+,您不会捕获完整的请求,只捕获其中的一部分。

来自Escape sequences

  

\ W
      任何“单词”字符

     

“单词”字符是任何字母或数字或下划线字符

这意味着,不包括点.,斜杠/,连字符-或下划线_旁边的任何其他特殊字符。

从条件看,您希望从规则中排除所有现有文件和目录。你可以用

实现同样的目标
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?page=$0 [L]

此规则捕获完整路径,包括任何特殊字符,并将其传递给index.php。但它也排除了所有真实文件,如Javascript源,CSS文件,图像等。

答案 1 :(得分:0)

删除所有.htaccess文件后,我注意到问题不在重写中。

我删除了服务器上的所有文件并重新上传,现在可以正常工作。

自我注意:使用一个好的FTP应用程序。