mod_rewrite突然停止工作

时间:2015-12-03 08:22:26

标签: apache .htaccess mod-rewrite url-rewriting

我在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

**这是我的原始完整代码 - UNEDITED ***

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错误,因此我真的需要深入了解重写器无法正常工作的原因。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我不确定它之前是否正常工作,但是你在上一个RewriteRule指令的正则表达式模式中有错误。定义的字符集是:

([\w-:/]+)

其中,-字符的位置会导致问题。将符号放在字符集的开头或结尾:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(\S+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?(.*)$ /$1.php [L]

RewriteRule ^([-\w:/]+)$ index.php?modname=$1