在url end添加动态ID时,RewriteRule会出现500错误

时间:2012-10-01 19:24:57

标签: .htaccess mod-rewrite

当我使用此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错误。

1 个答案:

答案 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" />