我正在使用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没有退出。
答案 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
将保留您要查找的字符串。