我刚才意识到,如果你手动在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]
提前感谢您的帮助。
答案 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>