【问题标题】:Wildcard in URL (mod_alias or mod_rewrite)URL 中的通配符(mod_alias 或 mod_rewrite)
【发布时间】:2011-10-16 03:59:12
【问题描述】:

我需要有诸如mydomain.com/whatever 之类的 URL,其中“whatever”可以是任意字符串,它们都调用同一个 php 文件,在其中整理出要显示的内容(或显示 404)。但是,我希望文件和其他 php 文件能够正常工作(任何其他别名或文件系统中实际存在的文件)。

一个简单的AliasMatch /* myphpfile.php(在httpd.conf 中的所有其他别名之后)在我自己的设置上工作正常,但在生产服务器上,通配符别名将所有其他php 文件发送到myphpfile.php。我不确定还有什么令人困惑的事情。

从技术上讲,whatever 字符串将是字母和小写,因此它可以过滤,但我使用正则表达式所做的所有尝试都没有成功。

【问题讨论】:

    标签: apache mod-rewrite httpd.conf mod-alias


    【解决方案1】:

    使用这些规则(你需要mod_rewrite):

    Options +FollowSymLinks -MultiViews
    RewriteEngine On
    RewriteBase /
    
    # do not do anything for already existing files
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule .+ - [L]
    
    RewriteRule ([a-z]+) /myfile.php [L]
    
    1. 放置在网站根文件夹中的 .htaccess 中。如果放置在其他地方,可能需要进行一些调整。

    2. 这会将所有不存在的单小写单词请求重写(内部重定向)到/myfile.php,其中使用$_SERVER['REQUEST_URI'] 脚本可以确定调用哪个 URL 并决定做什么(路由)。

    3. 这适用于像/whatever 这样的网址,但对/what-ever/hello/pinky/hello123 不起作用。

    【讨论】:

    • 谢谢,虽然看起来生产服务器没有 mod_rewrite,所以如果有任何方法可以单独使用 mod_alias,那就太棒了。
    • @rob 不幸的是,我不知道如何使用 mod_alias 来完成。我建议联系您的托管公司(或您的生产服务器所在的任何地方)以启用它(mod_rewrite 被广泛使用,然后我认为禁用此功能没有任何好处 - 除非它是非常便宜的托管,他们在单个服务器上拥有数百个站点)。
    • 这是一个客户的服务器,他们已经完全锁定了。如果我可以在不打扰 IT 人员的情况下做事(并等待他解决),那总是更好。 :) 但是谢谢,我会继续告诉他们他们需要这个,并使用你的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 2010-10-22
    • 2011-08-14
    • 2016-10-15
    • 1970-01-01
    • 2011-11-13
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多