一个文件中的多个ht访问规则

时间:2015-08-02 11:45:30

标签: php apache .htaccess url-routing

我的网站应尝试提供来自缓存子目录(/ app / storage / cache)的所有请求,以便从/app/storage/cache/two.html

提供/two.html请求

更多例子: /从/app/storage/cache/index.html提供 /two.html来自/app/storage/cache/two.html /文件夹从/app/storage/cache/folder/index.html

提供

如果没有找到文件/目录,它应该使用php文件/app/router.php来处理所有请求

我尝试了什么:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1 [L]
RewriteRule ^(/)?$ /app/storage/www/$1 [L]

适用于捕获所有网址并提供正确的资源而不更改网址。现在赶上其他所有:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . app/router.php [L]

这也有效,但第一组条件不再有效......

1 个答案:

答案 0 :(得分:1)

我可以通过三种方式思考如何解决这个问题。一个是通过router.php检查缓存,然后通过同一个文件生成页面。另外两种方式涉及一些重写魔法。

我没有测试其中任何一个。

堕落方法

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1

#From this point on, the file/dir either exists or
#%{REQUEST_FILENAME} is now /app/storage/www/something
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^app/storage/www/ /app/router.php [L]

明确测试

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/app/storage/www/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/app/storage/www/$1 !-d
RewriteRule ^(.*)$ /app/router.php [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /app/storage/www/$1 [L]

使用Apache的主配置文件(httpd.conf)而不是.htaccess文件可以加快这两种方法,因为它不需要在每个请求上搜索/读取.htaccess文件。