htaccess正则表达式包含&符号

时间:2014-07-04 11:42:48

标签: regex apache .htaccess mod-rewrite

我的CMS会为以下文章生成网址:

/?action=viewArticleName&page_identifier=lessons

我用以下规则重写了这个:

RewriteRule ^pages/([a-z,A-Z,0-9-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC]

为URL生成/pages/lessons

我现在的问题是用'&'创造一些东西或者&符号。说:

/pages/terms&conditions

我想我的表达式([a-z,A-Z,0-9-]+)不包含这些字符? 有人请介意解释是否可能这样做,以及是否存在任何安全风险?

假设安全性更多地取决于在文章类中使用preg_replace或其他安全措施?如果我错了,请纠正我,只是想创建一个简单的CMS来帮助我掌握一些事情。

使用以下php从数据库中驯服它:

public static function getBypage_identifier( $page_identifier ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles WHERE page_identifier = :page_identifier";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":page_identifier", $page_identifier, PDO::PARAM_STR );
    $st->execute();
    $row = $st->fetch();
    $conn = null;
    if ( $row ) return new Article( $row );
  }

这可能与剥离&出来吗?数据库位于utf8_general_ci中。并且在page_identifier中为'terms-& -disclaimer'。只需拉一个空白页。

1 个答案:

答案 0 :(得分:1)

就是这样:

RewriteEngine On

RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

顺便说一下,除非你想要匹配文字逗号,否则你不需要在逗号中添加逗号。