页面slug与htaccess中的rewriterule

时间:2014-12-26 23:07:12

标签: php .htaccess mod-rewrite redirect slug

我在htaccess中使用重写规则来获取slug的页面数据。

我通过向.htaccess添加行来手动完成:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^עמוד-מסוים$ /page.php?id=1 [L]
RewriteRule ^דוגמא-לעמוד$ /page.php?id=2 [L]
RewriteRule ^דוגמא-נוספת$ /page.php?id=3 [L]
RewriteRule ^טקסט-כלשהו$ /page.php?id=4 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]

它的工作正常但我每次都需要添加新的.htaccess行。

我的数据库表有Id和Slug(以及其他信息) 我的page.php使用$ _GET [' id'],然后通过此ID从DB中选择其他数据。

我试过这样的事情:

htaccess的:

RewriteRule ^page/([^/]*)$ /page.php?id=$1 [L]

page.php文件:

$id=$_GET['id'];

    if(is_int($id)==false){ // if slug was enterd
        $result=$mysqli->query("SELECT `id` FROM `pages` WHERE  `slug`='$id' limit 1");
        while($row=mysqli_fetch_assoc($result)){
            $id=$row['id'];
        }//query
    }

但网址看起来不像我想要的(添加/ page / to url)

我也试过了:

htaccess的:

RewriteRule ^/([^/]*)$ /page.php?id=$1 [L]

但是我的网站上的其他网址(未连接到page.php)会出现问题

如何在不添加htaccess行的情况下使其正常工作?

编辑: 当我尝试这个.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !www\.example\.co\.il$ [NC]
RewriteRule ^(.*)$ http://www.example.co.il/$1 [L,R=301]
ErrorDocument 404 /404.php
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]
RewriteRule ^צרו-קשר$ /contact.php [L]
RewriteRule ^blog$ /blog.php [L]

我在所有页面上都出错了,如果我向上移动RewriteRule ^ /?([^ /] +)$ /page.php?id=$1 [L],只有page.php文件能正常工作(博客和联系不起作用)并且非WWW网址也不会有效。

2 个答案:

答案 0 :(得分:0)

您可以尝试添加一些条件,例如:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]

过滤掉所有现有文件和目录。

另外,您可能需要考虑sanitizing your $id parameter before you stick it in a query

答案 1 :(得分:0)

找到解决方案。这工作完美:

ErrorDocument 404 /404.php 
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteRule ^צרו-קשר$ /contact.php [L]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([^/]+)$ /page.php?id=$1 [L]