【发布时间】:2015-12-03 08:22:26
【问题描述】:
我在 htaccess 文件中有以下 mod_rewrite 代码。自从我写它以来,它在过去的几个月里一直运行良好。但是今天早上突然之间它完全停止了工作。有什么想法可以解决这个问题吗?
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
RewriteRule ^([\w-:/]+)$ index.php?modname=$1
** 这是我的原始完整代码 - 未编辑 ***
ErrorDocument 404 "<H1>Page not found</H1>"
ErrorDocument 403 "<H1>Access denied</H1>"
RewriteEngine On
## REQUIRE SSL RULE
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
# browser requests PHP
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
RewriteRule ^([\w-:/]+)$ index.php?modname=$1
看来 mod_rewrite 确实有效,因为我按照在线指南做了一个基本的 mod_rewrite,如下所示:
RewriteRule cat/(.*)/(.*)/$ /test.php?$1=$2
如果我打开 url mydomain/cat/product/123/,它似乎可以工作
* 更新 *
作为临时解决方案,我添加了一个自定义 404 页面,如下所示:
ErrorDocument 404 error404.php
然后在 error404.php 文件中,我包含 index.php 以与 mod_rewrite 相同的方式工作,即应用以下代码:
$modname = ltrim($_SERVER['REQUEST_URI'], '/');
这在没有 mod_rewrite 的情况下解决了问题。但这会导致我的日志文件中出现大量 404 错误,因此我真的需要深入了解重写规则不起作用的原因。
有什么建议吗?
【问题讨论】:
-
它到底是怎么不起作用的?它触发错误消息?它以给定的方式行为不端?
.htaccess文件未解析? -
.htaccess 文件正在工作,因为我有一个自定义的 404 代码。如果我转到 url: /users/adduser 它应该加载 index.php?modname=users/adduser 但我不断收到 404 错误,这意味着它没有应用 mod_rewrite
-
我没有省略相关代码,我只是在该规则有效时删除了有关 SSL 的部分内容,但后来编辑了帖子以将其包含在底部。我现在将编辑帖子并添加未修改的整个代码
-
我看到你编辑了 我的主机没有启用 mod_rewrite 问题。我的评论指的是那个,所以我会删除它以避免混淆。
-
什么不起作用?你能用几句话解释一下吗?您无法访问您的网页吗?它是否返回循环错误?或者别的什么
标签: apache .htaccess mod-rewrite url-rewriting