页面不存在时的内部服务器错误

时间:2011-12-12 00:39:23

标签: php apache .htaccess mod-rewrite

我刚才意识到,如果你手动在URL栏中输入我网站上不存在的页面,那么该站点会响应内部服务器错误。

不应该找不到404页面吗?

我的网站为http://www.cristianrgreco.com,例如http://www.cristianrgreco.com/example将返回服务器错误。

这是我在使用.htaccess文件时经常遇到的错误,所以我在下面发布了。

RewriteEngine On
Options +FollowSymLinks 

# Add WWW to URL
RewriteCond %{HTTP_HOST} ^cristianrgreco\.com$ [NC]
RewriteRule ^(.*)$ http://www.cristianrgreco.com/$1 [L,R=301]

# Remove trailing slashes from end of URL
RewriteCond %{HTTP_HOST} !^\.cristianrgreco\.com$ [NC]
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [L,R=301]

# Rewrite article URLs
RewriteRule ^articles/([a-zA-Z0-9_-]+)/?$ articles.php?article=$1

# Remove file extension from PHP files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

之前我遇到过这个问题,问题就在这一行

RewriteRule ^(.*)$ $1.php [L,QSA]

RewriteRule ^([^\.]+)$ $1.php [NC,L,QSA]替换它似乎是诀窍。括号括号表示RewriteRule会记住匹配的任何内容。在括号内,它显示“I’d like one or more characters that aren’t a dot”.

<IfModule mod_rewrite.c>
   Options +FollowSymLinks
   Options +Indexes
   RewriteEngine On
   # Add WWW to URL
   RewriteCond %{HTTP_HOST} ^cristianrgreco\.com$ [NC]
   RewriteRule ^(.*)$ http://www.cristianrgreco.com/$1 [L,R=301]

   # Remove trailing slashes from end of URL
   RewriteCond %{HTTP_HOST} !^\.cristianrgreco\.com$ [NC]
   RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [L,R=301]

   # Rewrite article URLs
   RewriteRule ^articles/([a-zA-Z0-9_-]+)/?$ articles.php?article=$1

   # Remove file extension from PHP files
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{SCRIPT_FILENAME} !-d
   RewriteRule ^([^\.]+)$ $1.php [NC,L,QSA]
</IfModule>