繁体   English   中英

.htaccess / php url重写没有路由?

[英].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&param2=$2&param3=$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM