对不起,我不知道我在做什么,我需要你的帮助。我有一个 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
现在我无法回滚,因为我收到了同样的信息……出了什么问题!
您需要在所需的特定区域启用 mod_rewrite 功能,无论是在 Location、VirtualHost 或 .htaccess 中。你可以这样做
您可以通过使用 RewriteLog 和 RewriteLogLevel 选项打开日志记录来查看模块正在执行的操作:
日志级别最高为 9,但文档警告不要超过 2 进行生产。完成调试后,我建议将其完全关闭。
您可以在mod_rewrite 文档中找到更多信息。
在查看了您的使用情况后,您似乎正在尝试将不存在的项目发送到 index.php。你可以在不使用 mod_rewrite 的情况下做类似的事情:
这会将用户重定向回 index.php 并要求您对位置进行硬编码,这可能并不理想。
或者,我建议颠倒条件的含义并删除第一个 RewriteRule。“如果请求不是文件,也不是链接,也不是目录,则重定向到 index.php”。这将使您的规则更简单。您也可以从 RewriteRules 中丢失 [NC] 标志,因为它不会产生任何影响。
(我还没有检查这是否有效)
重新启动 Apache 服务器?