1

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

我有一个可以访问的网站:

www.site.com
www.site.com/684
www.site.com/684/some-slug-name-here

所有这些场景都应该去index.php并传入可选id=684slug=some-slug-name-here

哪个工作正常。

我的问题是我有一个单独的文件。现在它被称为admintagger.php- 但是当我称之为任何东西时它会失败。21g12fjhg2349yf234f.php有同样的问题。

问题是我希望能够admintagger.phpwww.site.com/admintagger

但它似乎符合我的索引规则,而是带我去那里。

这是我的代码:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /


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

1 回答 1

1

如果您希望能够通过名称(无扩展名)任意访问 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]
于 2012-10-19T02:22:55.013 回答