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

jki*_*und 3 php .htaccess mod-rewrite url-rewriting

所以我已经搜索了一段时间,但找不到任何关于如何创建漂亮的 url / seo / slug url 类型系统而不将所有内容发送到 index.php 或将内容移动到子文件夹的具体信息。

基本上,我正在制作一个网站,您目前可以访问像 movie.php?id=####/show.php?id=#### 这样的网址。理想情况下,我希望 url 为电影/#### 或电影/id/####(或我可以用来获取正确名称的名称的下一行)等。

有没有办法在没有单个 index.php 路由器的情况下做到这一点,或者我只需要重写我的所有文件以遵循这种风格?

Jon*_*ens 5

您可以在 .htaccess 中创建重写规则,将电影 URL 路由到 movie.php,如下所示:

电影/123:

RewriteRule ^movie/(\d+)$ movie.php?id=$1 [L]
Run Code Online (Sandbox Code Playgroud)

电影/ID/123:

RewriteRule ^movie/id/(\d+)$ movie.php?id=$1 [L]
Run Code Online (Sandbox Code Playgroud)

电影/电影名:

RewriteRule ^movie/(\S+)$ movie.php?slug=$1 [L]
Run Code Online (Sandbox Code Playgroud)

电影/片名/片名:

RewriteRule ^movie/title/(\S+)$ movie.php?slug=$1 [L]
Run Code Online (Sandbox Code Playgroud)

组合电影/123/电影标题:

RewriteRule ^movie/(\d+)/(\S+)$ movie.php?id=$1&slug=$2 [L]
Run Code Online (Sandbox Code Playgroud)

编辑:添加了一个完整的 .htaccess 示例,需要最多 2 个额外的可选参数,如果 url 不是用于电影,则在 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>
Run Code Online (Sandbox Code Playgroud)

^匹配从开始
$到匹配直到结束
?0 或 1 次出现
+1 次或多次出现
*0 次或多次出现

如果 url 规则不匹配并且文件不存在,那么它会将 url 路由到 index.php,但如果您不想要,可以删除最后一部分。