更友好的URL的RewriteRule

时间:2017-09-13 16:18:13

标签: php .htaccess mod-rewrite

我有一个网站在子文件夹中有一个新闻部分,我一直在手动添加。

www.example.com/subfolder/news-and-views/name-of-article.php

我最近制作了一个相当简单的CRUD功能,可以更轻松地添加这些文章。

我有:

  1. www.example.com/subfolder/news-and-views/index.php - 显示所有文章
  2. www.example.com/subfolder/news-and-views/article.php - 这会从$_GET请求
  3. 中获取Id参数

    我查看文章时最终得到的网址是:

    www.example.com/subfolder/news-and-views/article.php?Id=name-of-article

    我做了一些阅读并使用http://htaccess.mwl.be/来测试RewriteRule

    规则是:RewriteRule /news-and-views/(.+) /news-and-views/article.php?Id=$1.php [L]

    然而,当我转到news-and-vies/(索引页面)时,我的CSS被剥离,并且在我的路径发生变化时没有显示任何内容。

    似乎也没有传递任何东西,而是仅仅使用实际的索引页面来访问article.phpid?=。

    要设置路径,我使用名为$path2root的变量,它是根目录的数量。 E.g $path2root = "../../";

    所以:我有include $path2root . "includes/head.php"

    我的RewriteRule是否干扰了这个变量?

    我的.htaccess文件

    RewriteEngine On
    RewriteRule /news-and-views/(.+) /news-and-views/article.php?Id=$1.php [L]
    

    我的文件结构

    / .htaccess at this level (root)
    --/ subfolder
    ----/ news-and-views
    ------/ index of news and views
    

1 个答案:

答案 0 :(得分:1)

RewriteRule /news-and-views/(.+) /news-and-views/article.php?Id=$1.php [L]

正如我的评论中提到的,你似乎省略了/subfolder,所以我不确定这是怎么重写的呢?您还需要小心重写现有文件(例如index.phparticle.php以及CSS?)并创建重写循环。

请尝试以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(subfolder/news-and-views)/(.+) /$1/article.php?Id=$2.php [L]