我一整天都在研究这个问题,但我无法弄明白。这就是我要的。两者都应将网址保留为/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)。真的不能更好地解释它。
答案 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]