我的服务器的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文件,所以我认为这两个文件是冲突的。任何网络开发者都能看到出现了什么问题?
答案 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
文件,默认情况下变量page
为home
。