我有两个apache服务器都有相同的设置,我克隆了apache配置文件,并且只更改了ServerName部分。当我输入mysite.com/somestuff时,它应该重写为index.php,它会在我的旧服务器上执行,但不是我的新服务器。当我使用mysite.com/index.php/somestuff时,我确保.htaccess存在,但是就像我的第一个网站一样,我需要它与mysite.com/somestuff合作。
我真的把头靠在墙上这里是我的.htaccess和apache配置文件
#.htaccess file
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule .? %{ENV:BASE}index.php/ [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
现在为我的apache配置
<VirtualHost *:80>
ServerAdmin user@host.com
ServerName mysite.com
DocumentRoot /home/richardw/www/halogen/web
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/richardw/www/halogen/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
如果这是一个重新发布,我道歉,但我一直在搜索,我将要失去它。
答案 0 :(得分:2)
当您转到
http://mysite.com/
时,是否重定向到http://mysite.com/index.php/
?
如果发生这种情况,则表示新服务器中未加载mod_rewrite。您需要确保它已加载到您的apache的服务器配置文件中。有关如何使用apache的一些说明,请参阅this answer。
重定向工作的原因是因为这个容器:
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /index.php/
</IfModule>
</IfModule>
这基本上说“如果mod_rewrite 不已加载”,那么如果加载了mod_alias,它会将根请求重定向到/index.php/
。因此,如果重定向正在发生,则mod_rewrite 不已加载。
答案 1 :(得分:0)
您是否尝试评论或删除此行
Options +FollowSymlinks
你的.htaccess?