清理网址的mod_rewrite提供500内部服务器错误

时间:2009-08-02 15:58:27

标签: php apache .htaccess mod-rewrite

我在使用mod_rewrite时遇到了一些麻烦。

在我的索引页面(index.php)上,我展示了一个博客,一个博客帖子页面如下所示: http://www.mydomain.com/blog/post-title

mod_rewrite就是:

RewriteRule ^blog/([A-Za-z0-9-]+)$ index.php?postslug=$1 [L]

这就像一个魅力。

但我还有另一个名为artists.php的页面,网址应如下所示: http://www.mydomain.com/artists/artist-name

mod_rewrite就是:

RewriteRule ^artists/([A-Za-z0-9-]+)$ artists.php?artistslug=$1 [L]

这给了我一个500内部服务器错误,我不知道为什么会发生这种情况......

index.php和artists.php都在我网站的根目录

.htaccess文件:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php

RewriteRule ^blog/([a-z0-9\-]+)$ index.php?postslug=$1 [L]
RewriteRule ^artists/([a-z0-9\-]+)$ artists.php?artistslug=$1 [L]

4 个答案:

答案 0 :(得分:4)

尝试使用此规则,而不是使用两个RewriteCond

的规则
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
RewriteRule ^(.*)$ $1.php [L]

我自己测试了它,而%{REQUEST_FILENAME}似乎包含了错误的值,但无论如何-f被评估为 true

答案 1 :(得分:1)

开启:

RewriteLog /path/to/file.log
RewriteLogLevel 4

答案 2 :(得分:0)

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule .* - [L]

RewriteRule ^blog/([-A-z0-9]+)$ index.php?postslug=$1
RewriteRule ^artists/([-A-z0-9]+)$ artists.php?artistslug=$1

答案 3 :(得分:-1)

RewriteRule本身对我来说很好,如果直接访问artists.php文件,检查是否发生服务器错误,而不进行URL重写。