1

我有服务器过载,服务器管理员说这个问题是由 htaccess 文件引起的

这是代码:

RewriteEngine On
RewriteBase /here/
RewriteRule ^top/?$ index.php?mode=top [QSA]
RewriteRule ^top/video/?$ index.php?mode=top&cat=vids [QSA]
RewriteRule ^top/picture/?$ /index.php?mode=top&cat=pics [QSA]

RewriteRule ^random$ index.php?mode=random [QSA]
RewriteRule ^random/video/?$ index.php?mode=random&cat=vids [QSA]
RewriteRule ^random/picture/?$ index.php?mode=random&cat=pics [QSA]

RewriteRule ^new/?$ index.php [QSA]
RewriteRule ^new/video/?$ index.php?mode=&cat=vids [QSA]
RewriteRule ^new/picture/?$ index.php?mode=&cat=pics [QSA]

RewriteRule ^video/([0-9]+)_(.*)$ item.php?cat=vids&id=$1 [QSA]
RewriteRule ^picture/([0-9]+)_(.*)$ item.php?cat=pics&id=$1 [QSA]
ErrorDocument 404 /item.php
4

2 回答 2

1

减少重写,把路由完全放到PHP里面处理404——

例子:

RewriteBase /my_blog

RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/my_blog/%{REQUEST_FILENAME} !-d
RewriteRule ^router.php [PT]

router.php这样做var_dump($_SERVER);时,您会看到请求的 URL 是什么以及您可以处理什么。

于 2012-10-08T21:39:28.970 回答
1

这会让你走到一半:

RewriteEngine On
RewriteBase /here/
RewriteRule ^(top|random|new)/?$ index.php?mode=$1 [QSA]
RewriteRule ^(top|random|new)/(video|picture)/?$ index.php?mode=$1&cat=$2 [QSA]
RewriteRule ^(video|picture)/([0-9]+)_(.*)$ item.php?cat=$1&id=$2 [QSA]
ErrorDocument 404 /item.php

这不会给你完全相同的结果——你cat要么是videoor picture,要么不是vidsor pics,所以你必须改变你的脚本才能让它工作。

如果你不能完成这项工作,你可以使用这个稍微简化的版本:

RewriteEngine On
RewriteBase /here/
RewriteRule ^(top|random|new)/?$ index.php?mode=$1 [QSA]
RewriteRule ^top/video/?$ index.php?mode=top&cat=vids [QSA]
RewriteRule ^top/picture/?$ /index.php?mode=top&cat=pics [QSA]

RewriteRule ^random/video/?$ index.php?mode=random&cat=vids [QSA]
RewriteRule ^random/picture/?$ index.php?mode=random&cat=pics [QSA]

RewriteRule ^new/video/?$ index.php?mode=&cat=vids [QSA]
RewriteRule ^new/picture/?$ index.php?mode=&cat=pics [QSA]

RewriteRule ^video/([0-9]+)_(.*)$ item.php?cat=vids&id=$1 [QSA]
RewriteRule ^picture/([0-9]+)_(.*)$ item.php?cat=pics&id=$1 [QSA]
ErrorDocument 404 /item.php
于 2012-10-08T23:27:41.693 回答