我对htaccess
重写规则有些新意,并且过去几天一直在为这里发生的事情摸不着头脑。没有任何谷歌搜索似乎有帮助,所以希望有人知道答案。
我有一个可以访问的网站:
www.site.com
www.site.com/684
www.site.com/684/some-slug-name-here
所有这些方案都应转到index.php
并传入可选的id=684
和slug=some-slug-name-here
哪种方法正常。
我的问题是我有一个单独的文件。现在它被称为admintagger.php
- 但是当我把它称之为任何东西时它会失败。 21g12fjhg2349yf234f.php
也存在同样的问题。
问题在于我希望能够从admintagger.php
www.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]
答案 0 :(得分: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]