我需要有mydomain.com/whatever
之类的URL,其中“whatever”可以是任意字符串,所有调用相同的php文件,在其中排序显示的内容(或显示404)。但是,我希望文件和其他php文件正常工作(任何其他别名,或实际存在于文件系统中的东西)。
一个简单的AliasMatch /* myphpfile.php
(在httpd.conf中的所有其他别名之后)在我自己的设置上正常工作,但在生产服务器上,通配符别名将所有其他php文件发送到myphpfile.php
。我不确定还有什么可能让人感到困惑。
从技术上讲,whatever
字符串将是字母和小写字母,因此可以对其进行过滤,但我使用正则表达式所做的所有尝试都没有成功。
答案 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]
将.htaccess放入网站根文件夹中。如果放在其他地方,可能需要进行一些调整。
这会将所有不存在的单小写字词请求重写(内部重定向)到/myfile.php
,其中使用$_SERVER['REQUEST_URI']
脚本可以确定调用了哪个URL并决定要做什么(路由)。
这适用于/whatever
等网址,但不会对/what-ever
,/hello/pinky
,/hello123
执行任何操作。