我无法让我的.htaccess文件正确并做我想要的事情。 在php中,我写了一个路由器来检查请求的uri。 我想要的重写规则是:
example.com/images/*
的请求重写为
example.com/view/template/images/*
,但未重定向。example.com
的请求应重定向到example.com/1/
。 index.php
(无形,无重定向)。我当前的.htaccess
文件符合所有这些要求,但存在严重缺陷。
当我转到example.com
时,它会被正确地重定向到example.com/1/
并重写为index.php
,但是当我查看Apache访问日志时,请求会被执行两次。
127.0.0.1 - - [30/Jan/2014:16:53:39 +0100] "GET / HTTP/1.1" 302 310 "-" "user-agent..."
127.0.0.1 - - [30/Jan/2014:16:53:40 +0100] "GET / HTTP/1.1" 302 310 "-" "user-agent..."
127.0.0.1 - - [30/Jan/2014:16:53:39 +0100] "GET /1/ HTTP/1.1" 200 11 "-" "user-agent..."
127.0.0.1 - - [30/Jan/2014:16:53:40 +0100] "GET /1/ HTTP/1.1" 200 11 "-" "user-agent..."
在index.php
我有一个记录器,这个也记录了两次点击。
这是我目前的.htaccess
。
RewriteEngine On
RewriteBase /
RewriteRule ^favicon.ico$ view/template/images/favicon.ico
RewriteRule ^images/(.*)$ view/template/images/$1
RewriteRule ^js/(.*)$ view/template/javascript/$1
RewriteRule ^css/(.*)$ view/template/css/$1
RewriteRule ^$ 1/ [R,L]
RewriteRule ^/$ 1/ [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [L]
任何想法有什么不对?如果我的.htaccess
文件被完全延迟,请不要开枪: - )
答案 0 :(得分:1)
试试这段代码:
RewriteEngine On
RewriteBase /
RewriteRule ^favicon\.ico$ view/template/images/favicon.ico [L,NC]
RewriteRule ^(images|js|css)/(.*)$ view/template/$1/$2 [L,NC]
RewriteRule ^$ 1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.+)$ $1/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]