.htaccess 重写匹配任意PHP文件的规则

.htaccess 重写匹配任意PHP文件的规则,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,我对htaccess重写规则有些陌生,在过去几天里,我一直在为这里发生的事情挠头。谷歌搜索似乎没有任何帮助,所以希望有人知道答案 我有一个网站,可以通过以下方式访问: www.site.com www.site.com/684 www.site.com/684/some-slug-name-here 所有这些场景都应该转到index.php并在此处传入可选的id=684和slug=some slug name 这很好用 我的问题是我有一个单独的文件。现在它被称为admintager.php——

我对
htaccess
重写规则有些陌生,在过去几天里,我一直在为这里发生的事情挠头。谷歌搜索似乎没有任何帮助,所以希望有人知道答案

我有一个网站,可以通过以下方式访问:

www.site.com
www.site.com/684
www.site.com/684/some-slug-name-here
所有这些场景都应该转到
index.php
并在此处传入可选的
id=684
slug=some slug name

这很好用

我的问题是我有一个单独的文件。现在它被称为
admintager.php
——但当我调用它时,它就失败了
21g12fjhg2349yf234f.php
也存在同样的问题

问题是我希望能够从
www.site.com/admintager

但它似乎符合我的索引规则,并将我带到了那里

这是我的密码:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /


RewriteRule ^imagetagger$ /imagetagger.php [NC,QSA]
RewriteRule ^([0-9]+)/?(.*)?/?$ index.php?id=$1&slug=$2 [NC,L,QSA]

如果您想通过名称(sans扩展名)任意访问php文件,则需要为其创建一个通用规则。但您需要小心,否则可能会重写对现有资源(如目录或slug)的合法请求。请尝试以下方法:

# make sure we aren't clobbering legit requests:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# see if appending a ".php" to the end of the request will map to an existing file
RewriteCond %{REQUEST_FILENAME}.php -f
# internally rewrite to include the .php
RewriteRule ^(.*)$ /$1.php [L]
然后,您就可以将路由发送到index.php:

RewriteRule ^([0-9]+)/?(.*)?/?$ index.php?id=$1&slug=$2 [NC,L,QSA]
尽管您可能会更好,但为您的3个案例中的每一个创建一个单独的规则:

RewriteRule ^([0-9]+)/([^/]+)/?$ /index.php?id=$1&slug=$2 [NC,L,QSA]
RewriteRule ^([0-9]+)/?$ /index.php?id=$1 [NC,L,QSA]
RewriteRule ^$ /index.php [L]

如果您想通过名称(sans扩展名)任意访问php文件,则需要为其创建一个通用规则。但您需要小心,否则可能会重写对现有资源(如目录或slug)的合法请求。请尝试以下方法:

# make sure we aren't clobbering legit requests:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# see if appending a ".php" to the end of the request will map to an existing file
RewriteCond %{REQUEST_FILENAME}.php -f
# internally rewrite to include the .php
RewriteRule ^(.*)$ /$1.php [L]
然后,您就可以将路由发送到index.php:

RewriteRule ^([0-9]+)/?(.*)?/?$ index.php?id=$1&slug=$2 [NC,L,QSA]
尽管您可能会更好,但为您的3个案例中的每一个创建一个单独的规则:

RewriteRule ^([0-9]+)/([^/]+)/?$ /index.php?id=$1&slug=$2 [NC,L,QSA]
RewriteRule ^([0-9]+)/?$ /index.php?id=$1 [NC,L,QSA]
RewriteRule ^$ /index.php [L]

好问题。你能把它的标题写得更具体些吗?好问题。你能把它的名字说得更具体些吗?是的,这解决了所有问题。我非常精通PHP,但我仍然无法理解这些规则:(谢谢你的帮助!@user1745715就格式良好的语言而言,mod_rewrite是迟钝和不可预测的。它是一种有着如此多奇怪细微差别的东西,你永远不会习惯它,直到你失败了很多次。是的,这解决了所有问题。我非常精通PHP,但这些重写规则仍然让我无法理解:(谢谢你的帮助!@user1745715就格式良好的语言而言,mod_rewrite是迟钝和不可预测的。它是一种有着如此多奇怪细微差别的东西,除非你多次失败,否则你永远不会习惯它。