【问题标题】:PHP - Using mod_rewrite in ApachePHP - 在 Apache 中使用 mod_rewrite
【发布时间】:2017-11-12 04:47:00
【问题描述】:

我有以下网址:

http://example.com/pages/page.php?company_name=Name

我想要实现的是有一个这样的网址:

http://example.com/pages/Name

我尝试了不同的规则,但它们不起作用:

RewriteRule ^pages/([A-Za-z0-9-]+)/?$ /pages/page.php?company_name=$1 [NC] or

RewriteRule ^pages/([^/]*)\.php$ /pages/page.php?company_name=$1 [L]

它不起作用。它给了我一个“未找到”的页面。如何正确使用 mod_rewrite?

【问题讨论】:

    标签: php apache mod-rewrite


    【解决方案1】:

    试试这个:

    RewriteRule ^pages/([0-9a-zA-Z\-_]*)(/|)$ /pages/page.php?company_name=$1 [QSA,L]
    

    这将关心或不关心网址是否有斜杠:

    http://example.com/pages/Name
    http://example.com/pages/Name/
    

    如果页面需要,还将包括任何额外的 agr (QSA):

    http://example.com/pages/Name/?more=stuff
    

    如果您的 apache 具有 mod_rewrite 并且 php 存在于您显示的位置,那应该可以。

    更新

    如果您有不同的 url 需要不同的 php,例如“bluepages”:

    http://example.com/bluepages/Name
    

    那么这将适用:

    RewriteRule ^bluepages/([0-9a-zA-Z\-_]*)(/|)$ /bluepages/somescript.php?some_var=$1 [QSA,L]
    

    如果你有多个这样的你想控制,你可以在你的 htaccess 中为每一个创建多个 RewriteRules。但是,如果您只想对其进行通配符,那么这将是盲目的(并导致您的 apache 日志中出现大量错误报告):

    RewriteRule ^([0-9a-zA-Z]*)/([0-9a-zA-Z\-_]*)(/|)$ /$1/page.php?some_var=$2 [QSA,L]
    

    您要么需要具体化,要么只需更改所有内容。有很多方法可以使用它,这实际上取决于您的意图。

    【讨论】:

    • 我尝试了上面的选项,但它仍然不起作用,仍然给我“未找到请求的 URL /bluepages/Name.php 在此服务器上找不到。我想知道文件夹结构很重要?因为我的 .htaccess 和剩余的 php 文件所在的根/页面文件夹。谢谢
    • 以上内容适用于您提供的示例。如果您正在做的事情不是您提供的,那么我的回答将不起作用。你现在提到蓝页和根/页面......所有这些东西都会发挥作用,应该已经添加到你原来的问题中。
    • 感谢更新,现在可以使用了。根据您提供的内容,我将尝试几个选项/场景,看看它会产生什么结果。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 2023-03-15
    • 2011-03-05
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多