经过大量研究,我终于了解到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上的信息,正则表达式开始对我越来越有意义。
答案 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]