我有一个需要包含以下内容的htaccess文件的应用程序:
http://107.170.120.88/tileserver/extra5/11/331/794.png
但是我收到了与以下模式匹配的404错误:
http://107.170.120.88/tileserver/extra5/11/331/796.grid.json
和
tileserver/extra5/
似乎任何带有路径的URL:
tileserver/tileserver.php/extra5/
需要改为:
RewriteCond $1 !^(tileserver\.php)
RewriteRule ^(.*)$ tileserver.php?/$1 [L,QSA]
但是我没有太多运气写一个htaccess文件来解决这个问题。
如果我拿出
RewriteRule ^tileserver/extra5/(.*)$ tileserver/tileserver.php/extra5/$1
基本脚本不起作用,但如果我添加如下内容:
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]
请注意,它位于子目录中,其中父(root)具有此htaccess文件:
message
从所有URL中删除index.php(对于codeigniter)。也许这有冲突?
答案 0 :(得分:0)
我怀疑问题可能是[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]
答案 1 :(得分:0)
使用如下数据结构:
example.com/tileserver/tileserver.php
和匹配模式的url
107.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]