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

时间:2015-12-16 15:36:26

标签: php apache .htaccess mod-rewrite

我有一个需要包含以下内容的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)。也许这有冲突?

2 个答案:

答案 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]