URL中的通配符(mod_alias或mod_rewrite)

时间:2011-07-29 17:58:35

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

我需要有mydomain.com/whatever之类的URL,其中“whatever”可以是任意字符串,所有调用相同的php文件,在其中排序显示的内容(或显示404)。但是,我希望文件和其他php文件正常工作(任何其他别名,或实际存在于文件系统中的东西)。

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

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

1 个答案:

答案 0 :(得分:2)

使用这些规则(您需要 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执行任何操作。