【问题标题】:.htaccess url rewriting rule for multiple php files.htaccess 多个php文件的url重写规则
【发布时间】:2017-07-26 16:41:16
【问题描述】:

我有大约 100 个 php 文件,我想重写它们的 url。 我知道为 php 文件重写 url 的方式类似于

www.domain.com/article1/2
RewriteRule    ^article1/([0-9]+)/?$    article1.php?page=$1    [NC,L]    # Handle page requests

因此,对于其他文件,我必须编写单独的 htaccess 规则,这会使文件变大,并且需要花费大量时间来为每个文件重写单独的规则。所以我认为无论如何都可以用单一规则为所有文件重写这些 url。

我的网址是这样的

www.domain.com/article1.php?page=1
www.domain.com/photos.php?page=1
www.domain.com/tips.php?page=1

我想把它们改写成

www.domain.com/article1/1
www.domain.com/photos/1
www.domain.com/tips/1

我知道我的上述规则是可能的,但为此我必须对每个文件使用每个规则。

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    这可能与您正在寻找的内容接近:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/([^/]+)/
    RewriteCond %{DOCUMENT_ROOT}/%1.php -f
    RewriteRule ^/?([^/]+)/([0-9]+)/?$ $1.php?page=$2 [END]
    

    该设置将在 http 服务器主机配置和动态配置文件(.htaccess 样式文件)中工作,前提是它们的解释完全启用(AllowOverride 指令)并且文件位于正确的位置并且http服务器可读。

    如果您使用的是非常旧版本的 apache http 服务器,您可能必须将 END 标志替换为 L 标志...


    一般提示:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。众所周知,这些文件容易出错,难以调试,而且它们确实会降低服务器的速度。它们仅在您无法控制主机配置的情况下(阅读:非常便宜的托管服务提供商)或如果您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)提供它们作为最后一个选项)。

    【讨论】:

    • 知道如何在 url 中显示 get 变量,例如:www.domain.com/photos/page/1
    • 当然,这是重写规则的标准用法。你可以自己做。查看RewriteRule 中的模式,找出括号对((...))和占位符($1$2)之间的对应关系。您必须为更长的模式添加另一个重写规则,将更特殊的规则放在 之前 更通用的规则之前,所以一般规则之前的例外。
    • 好的,谢谢 :) : : RewriteRule ^/?([^/]+)/page/([0-9]+)/?$ 工作所以我一直被 ?$ 搞糊涂了:) 这意味着字符串的结尾。
    • $ 将表达式锚定到主题的末尾,是的。 ? 使 / 可选。有一些关于正则表达式的好书。非常值得一读;-)
    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2017-07-16
    • 2016-03-30
    • 2019-03-19
    • 2012-08-20
    相关资源
    最近更新 更多