URL重写具有不同数量的查询字符串.htaccess的链接

时间:2017-03-12 20:14:05

标签: php .htaccess mod-rewrite

我正在处理的网站有一个新闻栏目,其中显示了页面中心的最新新闻文章以及右侧栏中的完整文章列表。

我能够创造出漂亮的"我的代码中的链接,用于将文章标题附加到链接,来自:

website.com/news.php?id=4

website.com/news/4/news-article-number-four

使用此.htaccess代码,我可以从网址中省略www.,还可以从我的网页中删除.php文件扩展名,并重写网址以提供正确的新闻文章:

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
# was originally ^news/(\d+)/?$ added .* to allow the
# title to be ignored
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]

所有这一切都很有效,在这里有很多有关人员的帮助。现在有趣的部分。

侧边栏的顶部是两个链接,即新闻主页和精选新闻项目。新闻主页链接是一个明智的选择:

<a href="news">News Home</a>

内部重定向到:

website.com/news

在上面的.htaccess代码中。

特色新闻项链接包含查询字符串:

<a href="news/featured/">Featured News Items</a>

我想重定向到:

news.php?type=featured

我猜我需要为特色新闻项目链接单独的重写规则,我试过这个,但它不起作用:

# test to add 'featured' in top sidebar link
RewriteRule ^news/(\w+)/?$ news.php?type=$1 [NC,L,QSA]

好像这个重写规则与内部重定向或其他类似内容发生冲突。这一切仍然有点过头了。

此外,我相信我还需要针对精选新闻项目侧边栏链接的另一条重写规则,这些内容也是如此,但我无法对其进行测试,因为我似乎无法通过沿着type=featured查询字符串值:

# test to add 'featured' to sidebar links
RewriteRule ^news/(\w+)/(\d+)/?.*$ news.php?type=$1&id=$2 [NC,L,QSA]

所以问题是,我是否必须为新闻主页,精选新闻项目和侧边栏链接设置单独的重写规则?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

如何重定向到同一页面,在此页面中检查是否有特定的新内容?

更容易解决的方法......有时候时间比“艰难的方式”更重要。