配置.htaccess以处理URL的段

时间:2019-01-12 21:54:46

标签: php apache .htaccess

我希望能够处理指向应用程序的URL的以下段:

https://example.com/app/date/category

哪里

  • /app是网站上的目录
  • /date是要传递的字符串值,例如; January_7
  • /category是要传递的文本值,例如; births

并将其路由到index.php进行处理。

这可以使用.htaccess文件来完成吗?

1 个答案:

答案 0 :(得分:1)

是的,您可以在.htaccess中进行此操作。您希望如何将值传递到PHP脚本可以确切确定如何在.htaccess中编写必要的指令。

这假设您的.htaccess文件位于/app子目录中,而index.php也位于/app/index.php中。

一种方法是使用FallbackResource来指定所有应重写为该请求的URL,否则将触发404。例如:

FallbackResource /app/index.php

然后,在index.php中,您将从PHP超全局变量:$_SERVER['REQUEST_URI']解析所需的路径段。请注意,所有URL都被路由到index.php,包括那些与您的模式不匹配的URL,因此由PHP相应地处理。


或者,如果您希望将各个路径段以GET参数的形式传递到index.php,则可以执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(\w+)/([\w-]+)$ index.php?date=$1&category=$1 [QSA,L]

前两个条件(RewriteCond指令)确保该请求不是针对文件或目录的(以避免重写静态资源)。

  • (\w+)捕获“日期”路径段,该路径段随后在 substitution 中使用$1反向引用进行引用。 \w是代表字符0-9a-zA-Z_的简写字符类。

  • ([\w-]+)捕获“类别”路径段,该路径段随后在 substitution 中使用$2反向引用进行引用。除上述字符外,这还允许使用-(连字符)。

然后,在您的PHP代码中,访问$_GET['date']$_GET['category']以访问您的值。

在第二个示例中,仅当请求与预期的URL请求模式匹配时才重写请求。 /app/<date>/<category>