我正在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]
答案 0 :(得分:0)
使用\w+
,您不会捕获完整的请求,只捕获其中的一部分。
\ W
任何“单词”字符“单词”字符是任何字母或数字或下划线字符
这意味着,不包括点.
,斜杠/
,连字符-
或下划线_
旁边的任何其他特殊字符。
从条件看,您希望从规则中排除所有现有文件和目录。你可以用
实现同样的目标RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?page=$0 [L]
此规则捕获完整路径,包括任何特殊字符,并将其传递给index.php
。但它也排除了所有真实文件,如Javascript源,CSS文件,图像等。
答案 1 :(得分:0)
删除所有.htaccess文件后,我注意到问题不在重写中。
我删除了服务器上的所有文件并重新上传,现在可以正常工作。
自我注意:使用一个好的FTP应用程序。