我知道已经多次询问过这个问题了。但我无法让它发挥作用。
我在我的Ubuntu服务器上安装了Apache2我还可以确认使用phpinfo();安装了mod_rewrite。我还在我的根文件夹(/var/www/.htaccess)中放了一个名为.htaccess的文件。在我的.htaccess文件中,我粘贴以下代码:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^.*$ test.php
所以一切都被重定向到test.php
但它仍然无效。所以我检查了/ etc / apache2下的httpd.conf文件。它是完全空的,没有代码行(这对我来说有点奇怪)?!但是在检查Stackoverflow答案时,httpd.conf中至少应该包含以下代码:
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Satisfy all
</Directory>
所以我将该代码粘贴到httpd.conf中。并使用sudo /etc/init.d/apache restart
重新启动Apache。它仍然不起作用?
我还测试过打开文件/ sites-enabled / 000-default和/ sites-available / default,其中所有虚拟主机设置位于/var/www
和/
目录下并更改为AllowOverride All。 mod_rewrite仍然无法正常工作。谁能帮帮我吗。这个问题一直在烘烤我的坚果。
另外,我的apache2.conf文件不起作用。我试着写som废话。它仍然给我正常结果而不是http 500错误
答案 0 :(得分:10)
如果您运行此命令,
sudo a2enmod rewrite
ubuntu将输出它是否已激活或已在运行。
答案 1 :(得分:7)
Niels Bom的所有建议都是最聪明的(我认为)。但我会添加这个作为第一个建议:尝试通过Ubuntu命令启动和停止apache:然后当它应该停止时,确保它已停止,即验证您的本地页面不再显示
/etc/apache2/
中的内容。应该有apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
mods-enabled
你会发现如果启用了mod,那么你可以继续,否则看看关于启用modrewrite的其他答案sites-enabled
:在哪里可以找到启用了...(猜猜是什么?)的网站。应该有default
网站。<virtualhost>
- </virtualhost>
标记之间的配置(当然)。请告诉我发生了什么,我很乐意相应地更新我的问题。
答案 2 :(得分:5)
因为这个帖子在google上排名很高,所以这里有另一个解决方案:
导致问题的原因是什么?
这是因为apache中的标准定义只是阻止所有.htaccess的东西。 Seriouslsy。这似乎是Ubuntu 12.04 LTS的初始状态。
<强>解强>
在/ etc / apache2 / sites-available / default(这是一个文件,而不是文件夹)中有一个代码块,如
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride XXXXXXXXXXXXXXXXXXX
Order allow,deny
allow from all
</Directory>
在这里你应该改变
AllowOverride None
到
AllowOverride All
重要强>
你必须使用sudo权限进行这些更改,否则Ubuntu将不会保存文件。在RESTART之后,你的.htaccess东西应该可行。要测试.htaccess只需将一些无意义的文本放入其中并浏览localhost或127.0.0.1 - &gt;如果你看到“内部服务器错误”:瞧!删除废话,你准备好了。
答案 3 :(得分:2)
好的,让我们检查一下假设:
在你的Apache配置文件中放入废话(并重新启动Apache以使它们生效),Apache会在重启时“抱怨”吗?然后它尝试加载这些文件。试试这个可以找到的每个Apache配置文件。您现在拥有已加载的Apache配置文件的完整列表。
在你的htaccess中废话,重新加载页面,你有500错误吗?如果没有,则htaccess没有加载。
将最基本的mod_rewrite语句放在你的htaccess中:
选项+ FollowSymLinks RewriteEngine On RewriteRule ^。* $ test.html
这应该重写每个test.html的请求。
试试这个并告诉我们结果。
答案 4 :(得分:0)
请检查/etc/apache2/apache2.conf
答案 5 :(得分:0)
在你提出的问题中,你提到过,
另外,我的apache2.conf文件不起作用。我试着写som废话。它仍然给我正常结果而不是http 500错误
所以,在发布更多东西以试用.conf文件之前,
运行strace -o somefilename.txt sudo /etc/init.d/apache restart
strace - 跟踪系统调用和信号:strace(1) - Linux man page 。
-o somefilename.txt
部分将strace
的输出放入somefilename.txt
。打开文本文件并搜索httpd.conf
。您应该能够看到类似于以下的代码:
stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0
open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3
httpd.conf
的路径将替换为默认httpd.conf
如果找到一个,请打开httpd.conf
并在那里进行更改。否则,httpd.conf
没有加载。
如果是以后的情况,请尝试:
sudo /etc/init.d/apache -f /path/to/httpd.conf start
另外,检查NameVirtualHost *:80
并确保没有注释。