如何在 Apache 上启用 mod_rewrite???它看起来已启用,但不起作用

如何在 Apache 上启用 mod_rewrite???它看起来已启用,但不起作用

抱歉,我不知道自己在做什么,我需要你的帮助。我有一个 htaccess 文件,它可以进行一些 URL 重写,但它在服务器上不起作用。我认为 mod_rewrite 未启用。但它没有被注释掉,phpinfo() 说它是已启用的模块之一。

我不知道该怎么办。请帮帮我!

来自我的.htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

更新:我在 http.conf 中将此行从 none 更改为 all:

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All

我保存了它。尝试重新启动 apache(按照我的 IT 人员说的做:/sbin/service httpd restart),但 apache 无法重新启动,提示:

Stopping httpd: [FAILED]
Starting httpd: [FAILED]
(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

现在我无法回滚,因为我收到了相同的消息...出了什么问题!

答案1

您需要在需要的特定区域中启用 mod_rewrite 功能,无论是在 Location、VirtualHost 还是 .htaccess 中。您可以使用以下方式执行此操作

RewriteEngine on
RewriteRule   ^oldstuff\.html$  newstuff.html

您可以通过使用 RewriteLog 和 RewriteLogLevel 选项打开日志记录来查看模块正在做什么:

RewriteLog "/var/log/apache/rewrite.log" 
RewriteLogLevel 2

日志级别最高可达 9,但文档警告不要在生产环境中超过 2。我建议在调试完成后将其完全关闭。

您可以在mod_rewrite 文档

看到您的用法后,似乎您正在尝试将不存在的项目发送到 index.php。您可以在不使用 mod_rewrite 的情况下执行类似操作:

 ErrorDocument 404 http://this.server/path/index.php

这会将用户重定向回 index.php 并要求您对位置进行硬编码,这可能并不理想。

或者,我建议反转条件的含义并删除第一个 RewriteRule。“如果请求不是文件、不是链接、也不是目录,则重定向到 index.php”。这将使您的规则更简单。您还可以从 RewriteRules 中删除 [NC] 标志,因为它不会产生任何效果。

RewriteEngine On
RewriteCond ! %{REQUEST_FILENAME} -s
RewriteCond ! %{REQUEST_FILENAME} -l
RewriteCond ! %{REQUEST_FILENAME} -d
RewriteRule ^.*$ index.php [L]

(我还没有检查过这是否有效)

答案2

重新启动 Apache 服务器?

相关内容