我在使用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]
答案 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重写。