PHP当前位置自动更改为REQUEST_URI

时间:2013-11-28 14:00:26

标签: php html .htaccess url-routing

我正在使用MVC。在app文件夹中:.htaccess

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

访问时:

http://localhost/app/user/login

$ _SERVER ['REQUEST_URI']显示

/app/user/login 

为什么不改为

/app/index.php?q=/user/login

在登录时渲染css时,应加载/app/style.css。但它加载的app / user / style.css没有退出。

2 个答案:

答案 0 :(得分:1)

要解决此问题,请尝试完成其余设置:

                    RewriteEngine on
                    RewriteRule "(^|/)\." - [F]
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteCond %{REQUEST_URI} !=/favicon.ico
                    RewriteRule ^ index.php [L]

如果你想通过重写进行一些压缩,这里还有一点额外的内容:

                    <IfModule mod_headers.c>
                            RewriteCond %{HTTP:Accept-encoding} gzip
                            RewriteCond %{REQUEST_FILENAME}\.gz -s
                            RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
                            RewriteCond %{HTTP:Accept-encoding} gzip
                            RewriteCond %{REQUEST_FILENAME}\.gz -s
                            RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
                            RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
                            RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
                            <FilesMatch "(\.js\.gz|\.css\.gz)$">
                                    Header set Content-Encoding gzip
                                    Header append Vary Accept-Encoding
                            </FilesMatch>
                    </IfModule>

答案 1 :(得分:0)

RewriteRule“在表面之下”工作。您的网络服务器将请求转换为您在RewriteRule中设置的URL,但用户在其浏览器中拥有的URL保持不变。 $ _SERVER ['REQUEST_URI']只列出用户请求的URI,而不是它被重写的URI。但是,您始终可以通过从URI中提取代码来获取代码中的“真实URI”。这样的事情可以做到:

$requestUri = $_SERVER['REQUEST_URI'];
$realUri = '/app/index.php?q=' . preg_replace('/^\/app/', '', $requestUri);

然后$realUri将保留您要查找的字符串。