[英].htaccess / php url rewriting without routing?
所以我一直在寻找一段时间,并且找不到任何具体的关于如何创建漂亮的url / seo / slug url类型系统而不将所有内容发送到index.php或将内容移动到子文件夹中。
基本上我正在制作一个网站,你现在可以去像movie.php这样的网址?id = #### / show.php?id = ####。 理想情况下,我希望网址是电影/ ####或电影/ id / ####(或者我可以用来抓住正确名称的名称下方)等等。
有没有办法在没有单个index.php路由器的情况下完成它,或者我只是要重写我的所有文件以坚持这种风格?
您可以在.htaccess中创建一个重写规则,将电影网址路由到movie.php,如下所示:
电影/ 123:
RewriteRule ^movie/(\d+)$ movie.php?id=$1 [L]
电影/ ID / 123:
RewriteRule ^movie/id/(\d+)$ movie.php?id=$1 [L]
电影/冠军的-电影:
RewriteRule ^movie/(\S+)$ movie.php?slug=$1 [L]
电影/标题/标题 - 的 - 电影:
RewriteRule ^movie/title/(\S+)$ movie.php?slug=$1 [L]
组合电影/ 123 /电影名称:
RewriteRule ^movie/(\d+)/(\S+)$ movie.php?id=$1&slug=$2 [L]
编辑:添加一个完整的.htaccess示例,需要1个最多2个额外的可选参数,如果网址不是电影,则返回index.php。
Options -Indexes
IndexIgnore */*
Options FollowSymLinks
AddDefaultCharset utf-8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^movie/([^/]+)/?([^/]*)/?([^/]*)$ movie.php?param1=$1¶m2=$2¶m3=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . index.php [L]
</IfModule>
^
从头开始匹配
$
匹配到结束
?
0或1次出现
+
发生一次或多次
*
出现0次或更多次
如果url规则不匹配且文件不存在,那么它会将url路由到index.php,但如果你不想这样,你可以删除最后一个部分。
是的,假设您的URL结构遵循相对一致的模式,您绝对可以使用.htaccess文件和mod_rewrite(不需要index.php文件,通常称为前端控制器)。
这是一个非常简单的例子:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)/(.*)$ $1.php?id=$2 [NC,L]
这会获取http://example.com/movie/3等传入的网址,并执行透明/内部重写(因此用户看不到网址更改)到http://example.com/movie.php?id = 3 。
当然,这个例子可以扩展到处理更多的参数等,但希望这能让你开始走上正确的道路。 我强烈建议您阅读mod_rewrite文档以获取更多详细信息: http : //httpd.apache.org/docs/2.4/mod/mod_rewrite.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.