【问题标题】:How can I rewrite any .htms in a directory to pass their names as an argument to a PHP file?如何重写目录中的任何 .htms 以将它们的名称作为参数传递给 PHP 文件?
【发布时间】:2014-01-28 18:54:44
【问题描述】:

我有一堆需要静态 URL 路径的页面,例如:

foo/bar/fooey/qwertyuiop.htm

但是,这些页面不存在。除了变量略有不同之外,它们都相同。

所以我创建了/foo/bar/details.php,它接受参数“id”和“type”。

任何想法如何制定一个重写规则,将 /foo 中的所有 .htms 及其子目录重定向到 details.php,如下所示:

/foo/bar/fooey/abc123.htm     --> /foo/bar/details.php?id=abc123

/foo/bar/xyzzy/hellothere.htm --> /foo/bar/details.php?id=hellothere

/foo/bar/applepie/check_pie_status.htm?type=peach

将被重写为

/foo/bar/details.php?id=check_pie_status&type=peach

换句话说,任何请求的 .htm 都将被重写为该 PHP 文件,而客户端看不到它。

【问题讨论】:

  • 我有最奇怪的代码问题...
  • @MarcB 这是不同的,因为(并且仅在)目录(和子目录)/foo/bar 中的所有 .htms 都被重写,您链接的页面与传递目录有关每个子目录的名称到一个新的 URL 参数。
  • 我同意这个问题与链接的问题不同
  • @AustinBurk:您不必担心单个重复投票。它需要 5 票才能将其标记为重复。您的问题不是重复的,所以那里不会有 5 票。

标签: php regex .htaccess mod-rewrite rewrite


【解决方案1】:

把这个放到/foo/bar/文件夹的htaccess文件中:

RewriteEngine On
RewriteRule ^(?:[^/]+/|)([^/.]+)\.htm$ details.php?id=$1 [L,QSA]

【讨论】:

    【解决方案2】:

    使用 .htaccess

    RewriteEngine On
    RewriteRule ^(.*)\.html$ details.php?id=$1&%{QUERY_STRING} [L]
    

    【讨论】:

      【解决方案3】:

      将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

      RewriteEngine On
      RewriteBase /
      
      RewriteRule ^([^/]+/[^/]+)/.*?/([^/.]+)\.htm$ $1/details.php?id=$2 [L,QSA,NC]
      

      【讨论】:

        【解决方案4】:

        听起来像是着陆页问题..

        根据我的经验,我可以提供这些想法:

        1. 使用 /etc/site-enable 中的 Nginx 站点启用文件夹创建不同的文件夹路径。 这将允许将某个域附加到文件夹路径或创建将任何 /foo 发送到特定路径的一般规则。

        2. 创建为每个域加载特定文件夹的脚本。我认为使用域作为密钥和路径 txt 的数据库是最好的解决方案。这是一个系统设计问题。

        3. 在主索引 php 文件中使用 Reg-ex 调用路径,从 $_SERVER URI 中提取此数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-22
          • 1970-01-01
          • 2011-12-13
          • 1970-01-01
          • 2019-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多