当我使用此htaccess代码时,我从链接的CSS文件等获得500内部服务器错误..任何人都知道可能是什么问题?我的htaccess还不太流利。
以下是代码:
RewriteEngine On
RewriteBase /
RewriteRule ^(system|img|res) - [L]
RewriteRule ^picture/([^/]*)/?$ picture.php?id=$1 [L,QSA]
## The below code is something I found on the internet to remove the .php tag
# remove .php; use THE_REQUEST to prevent infinite loops
RewriteCond %{HTTP_HOST} ^www\.mywebsite\.com
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]
# remove index
RewriteRule (.*)index$ $1 [R=301]
# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
网址应为:www.mysite.com/pictures/1(id)
id始终是一个数字。
它确实向我显示了该页面,我可以回显该ID,因此该部分正在运行,但如上所述,它会对链接文件产生500错误。
答案 0 :(得分:1)
不确定为什么它会像那样...... CSS文件夹与实际的php文件位于同一个文件夹中。
您已使用相对URI链接到它:
<link rel="stylesheet" type="text/css" media="all" href="./css/text.css" />
e.g。 ./css/text.css
,虽然css文件可能与picture.php
文件位于同一目录中(我假设是生成内容的内容),但浏览器实际上是对CSS的请求,而不是picture.php脚本。浏览器请求此URL http://www.mysite.com/picture/1
,服务器在内部将/picture/1
重写为/picture.php?id=1
,浏览器不知道发生了什么。因此它将基URI视为/picture/
。如果浏览器直接转到php文件:http://www.mysite.com/picture.php?id=1
,则基本URI将为/
,而css将很快解析为/./css/text.css
。但是/picture/1
请求具有不同的基URI,因此浏览器(不知道基础是不同的)盲目地尝试将css检索为/picture/./css/text.css
,这会因为您有错误处理该URI的规则而失败。通常你会得到一个404,但是在图片重写之后你的规则会错误地处理URI并返回500服务器错误。
您可以添加标题:
<base href="/">
在picture.php
生成的内容中,或使URI为绝对值:
<link rel="stylesheet" type="text/css" media="all" href="/css/text.css" />