我在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错误,因此我真的需要深入了解重写器无法正常工作的原因。
有什么建议吗?
答案 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