我正在尝试使用mod_rewrite
模块Apache24 server
,但无法加载它。我知道关于这个主题已经有很多问题被问到,我已经全部回答过了,但似乎都不起作用。这些是我到目前为止一直遵循的步骤---
CHANGED
httpd.conf
文件进行了以下更改:
a. 取消注释LoadModule rewrite_module modules/mod_rewrite.so
b. 更改AllowOverride None
为AllowOverride All
重新启动 Apache 服务器
使用命令提示符命令检查已加载的模块
httpd -M
。我可以看到 mod_rewrite 模块已加载。我附上了下面的图片。
但完成所有这些步骤后,我看不到 mod_rewrite 作为加载模块phpinfo
。
如上图所示,没有加载 mod_rewrite 模块。此外,我甚至尝试使用.htaccess
文件重写 URL,但不起作用。Apache 似乎忽略了.htaccess
文件,尽管我已将该文件放在我的根目录中。
Note: I am running `PHP` as an apache module
Using `WAMP` stack
Using `localhost` as server
我非常需要这个模块来实现 URL 重写。你们能建议一些其他方法来加载这个模块吗?
编辑
我尝试从虚拟主机重写 URL,因为答案表明模块已加载,并且它不依赖于.htaccess
或info.php
。但它仍然没有重定向。我正在添加Virtual host
以下设置---
<VirtualHost *:80>
<Directory "/Apache24/htdocs">
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.html index.php
</Directory>
ServerName localhost
DocumentRoot "/Apache24/htdocs"
ErrorLog "/Apache24/logs/error.log"
CustomLog "/Apache24/logs/access.log" combined
<directory "/Apache24/htdocs">
<IfModule rewrite_module>
Options +FollowSymlinks
RewriteEngine On
</IfModule>
<IfModule rewrite_module>
RewriteRule ^working.php fun.html
</IfModule>
</directory>
# Rewrite Rules #####################
RewriteEngine On
RewriteRule ^working.php fun.html
# end Rewrite Rules #################
</VirtualHost>
working.php
当我尝试运行 时,上述代码不会将其重定向到fun.html
。它只是说:
该服务器上未找到所请求的 URL /working.php。
答案1
- 您不需要 .htaccess 或 AllowOverride 来使 mod_rewrite 工作,不要使用,因为您是服务器的管理员,因为它只会使您的生活复杂化并给您的服务器带来不必要的开销。
除了加载模块之外,您唯一需要的指令是:
RewriteEngine 开启
额外的:
- 如果您只需要 Redirect/RedirectMatch,请考虑使用 mod_alias 进行简单的重定向。
- 考虑在虚拟主机上下文中定义您的重定向/重写,以避免未来的噩梦和不久的将来的脱发。
答案2
从您链接的屏幕截图来看,您的服务器根目录(文件系统路径)似乎是,但您在任何服务器配置指令中C:/Apache24
都没有提及?您需要引用完整的文件系统路径,例如:C:
<Directory "C:/Apache24/htdocs">
RewriteRule ^working.php fun.html
此指令直接在 VirtualHost(容器外<Directory>
)中使用,永远不会匹配。在 VirtualHost(或服务器配置)上下文中使用时,mod_rewrite 会匹配完整的 URL 路径,值得注意的是包括斜杠前缀。这与在目录/.htaccess
上下文中使用 mod_rewrite 时(排除斜杠前缀时)的一个重要区别。