htaccess-在所有URL请求中插入脚本名称


htaccess - insert script name into all URL requests

我有一个应用程序,它需要一个包含以下内容的htaccess文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(tileserver'.php)
RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]

但我得到了404个与以下模式匹配的错误:

http://107.170.120.88/tileserver/extra5/11/331/794.png

和:

http://107.170.120.88/tileserver/extra5/11/331/796.grid.json

似乎任何带有路径的URL:

tileserver/extra5/

需要改为:

tileserver/tileserver.php/extra5/

但我没有太多的运气写一个htaccess文件来解决这个问题。

如果我取出

RewriteCond $1 !^(tileserver'.php) RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]

基本脚本不起作用,但如果我添加以下内容:

RewriteRule ^tileserver/extra5/(.*)$ tileserver/tileserver.php/extra5/$1

它没有效果。我该如何编写此规则?

---更新---

以下是完整的htaccess:

DirectoryIndex tileserver.php
RewriteEngine on
RewriteBase /tileserver/
<FilesMatch "'.mbtiles$">
 Order Allow,Deny
 Deny from all
</FilesMatch>
RewriteRule ^(.+).jpeg$ $1.jpg [L]
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
RewriteRule ^tileserver.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]

注意,它位于一个子目录中,父目录(根目录)中有以下htaccess文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

它从所有URL中删除index.php(对于codeigniter)。也许这是矛盾的?

使用这样的数据结构:

example.com/tileserver/tileserver.php

以及匹配模式的url107.170.120.88/tileserver/extra5/11/331/794.png

这将导致107.170.120.88/tileserver/tileserver.php?/extra5/11/331/794.png

你的.htaccess应该是这样的:

#turn on the rewrite engine
RewriteEngine On
#use the as base for your rewrite conditions the following folder
RewriteBase /tileserver
#since we don't want to rewrite the requests pointing directly to this script, leave it
RewriteRule ^tileserver.php - [L]
#if its not a file or a folder rewrite everything to tileserver.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#everything that comes after /tileserver is passed as argument to the php script
RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]

我怀疑问题可能是[L]标志。

相反,请尝试:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(tileserver'.php)
RewriteRule ^(.*)$ tileserver.php?/$1 [QSA]
RewriteRule ^tileserver/extra5/(.*) tileserver/tileserver.php/extra5/$1 [L,QSA]