重写规则修正

时间:2014-03-24 00:04:01

标签: php apache .htaccess mod-rewrite url-rewriting

我一整天都在研究这个问题,但我无法弄明白。这就是我要的。两者都应将网址保留为/p/test//p/test,而不是实际重定向到/p.php?slug=test(与标记相同)。

example.com/p/test/ -> Do query example.com/p.php?slug=test  
example.com/p/test  -> Do query example.com/p.php?slug=test

example.com/tag/sometag/ -> Do query example.com/tag/index.php?tagID=sometag  
example.com/tag/sometag  -> Do query example.com/tag/index.php?tagID=sometag  

到目前为止我已尝试过:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p/([a-z]+)$ p/$1/ [L]
RewriteRule ^p/([a-z]+)/$ p.php?slug=$1 [L]

RewriteRule ^tag/([a-z]+)/?$ tag/index.php?tagID=$2 [L]  

第二个例子:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^p/([a-z]+)$ p/$1/ [L]
RewriteRule ^p/([a-z]+)/$ p.php?slug=$1 [L]

RewriteRule ^tag/([a-z]+)$ tag/$2/ [L]
RewriteRule ^tag/([a-z]+)/$ /tag/index.php?tagID=$2/ [L]  

最后一个例子:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^p/([.*])$ p/$1/ [L]
RewriteRule ^p/([.*])/$ p.php?slug=$1 [L]

RewriteRule ^tag/([.*])/?$ tag/index.php?tagID=$1 [L]

除了第一个示例第一规则(第3行和第4行)之外,它们的工作正常。即使那个有问题,/ p / test与/ p / test /不同,但没有任何错误迹象。

以下是继续执行tagID param的功能(并且工作正常):

public function searchTagID($tag) {
    if (isset($tag)) {
        $db     = new databaseEstablish();
        $con    = $db->connect();

        $sql    = $db->dbQuery($con, "SELECT *
                                      FROM posts
                                      WHERE tags LIKE '%{$tag}%'");

        $resultCount = $db->countRows($sql);

        if ($resultCount == 0) {
            Header('Location: ../../index.php');
        }
        while($row = $db->fetchArray($sql)){
                echo $row[0];
            }
    }
}

<小时/> 这个.htaccess吼叫:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^tag/([^/]+)/?$ /tag/index.php?tagID=$1 [QSA,L]

RewriteRule ^p/([^/]+)/?$ /p.php?slug=$1 [QSA,L]

重定向example.com/p/test/ - &gt; example.com/p.php?slug=test 重定向example.com/p/test - &gt;找不到对象错误

重定向example.com/tag/sometag/ - &gt;找不到对象错误 重定向example.com/tag/sometag - &gt;找不到对象错误

现在,我想告诉你一些事情,请不要责怪我,但我不希望上面的网址重定向到我在顶部写的那个页面,但只是为了重写它们(做查询)。例如:example.com/p/test/ - &gt;不应该重定向example.com/p.php?slug=test但是只能访问URL QUERY(我怎么称它为后端)。 URL应该是example.com/p/test/(或/ p / test)。真的不能更好地解释它。

2 个答案:

答案 0 :(得分:0)

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?p/([^/]+)/?$ /p.php?slug=$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/?tag/([^/]+)/?$ /tag/index.php?tagID=$1 [R=301,L]

答案 1 :(得分:0)

这应该有效:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /projects/

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^tag/([^/]+)/?$ tag/index.php?tagID=$1 [QSA,L]

RewriteRule ^p/([^/]+)/?$ p.php?slug=$1 [QSA,L]