重写"漂亮的链接" causng 500内部服务器错误

时间:2017-03-06 19:06:01

标签: php apache .htaccess mod-rewrite url-rewriting

经过大量研究,我终于了解到mod_rewrite并没有创建"漂亮的链接"而是将它们重写为" normal"由服务器处理的链接。

在SO上有一些慷慨的帮助,我已经能够做一些基本的URL重写,特别是删除www..php文件扩展名,即使用户键入{{1} }。 .htaccess代码供参考:

page.php

我正在处理的这个网站有一个新闻栏目,链接使用查询字符串从侧栏中的链接传递文章ID,如下所示:

RewriteEngine On # omit www. RewriteCond %{HTTP_HOST} ^www\.website\.com [NC] RewriteRule ^(.*)$ http://website.com/$1 [L,R=301,NE] # To externally redirect /dir/file.php to /dir/file RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC] RewriteRule ^ /%1 [R=302,NE,L] # To internally redirect /dir/file to /dir/file.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.+?)/?$ $1.php [L]

找到这篇惊人的帖子HERE后,我开始尝试从帖子中获取这行代码:

<a href="news.php?id=' . $phpVariable . '...etc.

并修改它以匹配我的网站:

RewriteRule ^blog/([0-9]+)/([A-Za-z0-9-\+]+)/?$ /blog/index.php?id=$1&title=$2 [NC,L,QSA]

然后我将新闻栏目中的链接代码修改为:

RewriteRule ^news/([0-9]+)$ news?id=$1 [NC,L,QSA] ...等

这样链接就会变得非常好。并使用上面显示的修改后的<a href="news/' . $phpVariable . '/进行重写。

RewriteRule位于.htaccess代码的底部(这可能是问题的一部分?),如下所示:

RewriteRule

现在,当测试新闻部分时,从侧边栏中选择的任何项目都会导致500内部服务器错误。

我只是有点过头了,虽然多亏了SO上的信息,正则表达式开始对我越来越有意义。

1 个答案:

答案 0 :(得分:1)

基于问题和评论,我建议你这样做:

ErrorDocument 404 default
ErrorDocument 500 default

Options +FollowSymLinks -MultiViews
RewriteEngine On

# omit www.
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [L,R=301,NE]

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=301,NE,L]

# rewrite pretty link to fetch news article
RewriteRule ^news/(\d+)/?$ news.php?id=$1 [NC,L,QSA]

# To internally redirect /dir/file to /dir/file.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^.]+?)/?$ $1.php [L]