.htaccess文件可能有冲突?

时间:2012-08-28 19:52:25

标签: php .htaccess mod-rewrite

我的服务器的public_html文件夹中有一个.htaccess文件,可以将我的主域名保存在子文件夹中:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?mrmikeanderson.com$
RewriteCond %{REQUEST_URI} !^/mrmikeanderson/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mrmikeanderson/$1
RewriteCond %{HTTP_HOST} ^(www.)?mrmikeanderson.com$
RewriteRule ^(/)?$ mrmikeanderson/index.php [L]        

在该子文件夹中是另一个.htaccess,其中包含更多重写内容以将/index.php?page=about之类的内容结尾为just / about:

RewriteEngine On
RewriteRule ^$ index.php?page=home
RewriteRule portfolio index.php?page=portfolio
RewriteRule resume index.php?page=resume
RewriteRule about index.php?page=about
RewriteRule contact index.php?page=contact

最后四页有效,但我对域名(\ ^ $)的重写被破坏了。一切都在我的本地MAMP服务器上运行,但是那里没有第一个.htaccess文件,所以我认为这两个文件是冲突的。任何网络开发者都能看到出现了什么问题?

3 个答案:

答案 0 :(得分:0)

尝试发表评论:

RewriteRule ^(.*)$ /mrmikeanderson/$1

看起来正则表达式^(.*)$会匹配包含空字符串的任何内容,这会与RewriteRule ^$ index.php?page=home冲突

编辑: 尝试使用([A-Za-z0-9]+)代替应该提供的^(.*)$

RewriteRule ^([A-Za-z0-9]+)$ /mrmikeanderson/$1

答案 1 :(得分:0)

您始终可以设置重写日志以查看http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog

上发生了什么

答案 2 :(得分:0)

我假设你有一个/mrmikeanderson/文件夹,其中第二个htaccess文件是。 RewriteRule ^$ index.php?page=home未被应用的原因是您要将/请求重定向到mrmikeanderson/index.php。所以要么改变这个规则:

RewriteRule ^(/)?$ mrmikeanderson/index.php [L]        

RewriteRule ^(/)?$ mrmikeanderson/index.php?page=home [L]        

或在其他htaccess文件中更改此规则:

RewriteRule ^$ index.php?page=home

RewriteRule ^(index.php)$ index.php?page=home

或者,您可以更改index.php文件,默认情况下变量pagehome