我的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'。只需拉一个空白页。
答案 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]
顺便说一下,除非你想要匹配文字逗号,否则你不需要在逗号中添加逗号。