4

我在服务器的 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 之类的内容结尾的 url 转换为 /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 文件不存在,所以我认为这两者是冲突的。任何网络开发冠军都能够看到出了什么问题?

4

3 回答 3

0

尝试注释掉:

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

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

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

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

于 2012-08-28T20:22:23.173 回答
0

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

于 2012-08-28T20:24:43.783 回答
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默认值。

于 2012-08-28T20:24:46.013 回答