我在同一目录posts.php
和postdetails.php
中有两个php文件。 posts.php
页面会列出所有帖子,postdetails.php
会在postid
设置为postdetails.php?id=3
时显示帖子:posts
我希望在不使用postdetails
的情况下访问.php
和www.domain.com/posts.php
页面,并添加一个正斜杠,如:
www.domain.com/posts/
我有:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]
我用过这个:
posts.php
现在我可以按照我想要的方式访问www.domain.com/posts/
,例如:www.domain.com/posts/postdetails.php?id=NUMBER
但现在所有帖子都显示为posts
问题是我希望他们也喜欢他们在id
子目录中,但我似乎无法使其工作。
我还想将slug
更改为postdetails.php?slug=this-is-a-post
这样我就会有类似www.domain.com/posts/this-is-a-post/
的内容,并将其改为function createSlug($str)
{
if($str !== mb_convert_encoding( mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32') )
$str = mb_convert_encoding($str, 'UTF-8', mb_detect_encoding($str));
$str = htmlentities($str, ENT_NOQUOTES, 'UTF-8');
$str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', '\\1', $str);
$str = html_entity_decode($str, ENT_NOQUOTES, 'UTF-8');
$str = preg_replace(array('`[^a-z0-9]`i','`[-]+`'), '-', $str);
$str = strtolower( trim($str, '-') );
return $str;
}
我正在使用此功能创建我的slu ..
{{1}}
请帮忙吗?
答案 0 :(得分:1)
使用索引文件创建目录帖子(显示帖子列表,链接到漂亮的网址)和 .htaccess :
RewriteCond %{REQUEST_URI} ^/posts/[^/]+/.*$
RewriteRule ^/posts/([^/]+)/$ postdetails.php?slug=$1 [QSA,L]
漂亮的网址
in this pattern:
http://www.example.com/posts/slug/
e.g.:
http://www.example.com/posts/keywords-are-here/
在文件 postdetails.php 中,您可以评估参数$_GET['slug']
。
答案 1 :(得分:0)
if(isset($_GET['id'])) { //your post identifier, if this is set, show a post
include("postdetails.php");
} else {
//your posts code
}
在您的索引上,然后包含页面,如果它被调用:
if(isset($_GET['p'])) {
include($_GET['p'] . '.php'); //include the page you want, it is a seperate php page
}
对于你的htaccess,你使用这样的东西(代码基于我自己使用的东西),其中$ p是你所在的页面(为了使它更友好,在你的情况下这将是帖子,或任何其他页面),id是下一个变量。但是,如果使用此选项,则您创建的所有页面都必须使用这两个变量,因此您需要重命名任何其他脚本以使用这些变量。当然,可以以类似的方式添加更多内容。
RewriteEngine On
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?p=$1&id=$2&actie=$3
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?p=$1&id=$2
RewriteRule ^([^/\.]+)/?$ index.php?p=$1
这可能不是最优雅的方式,但更有经验的用户也应该回答。