HTACCESS重定向到index.php:子文件夹修复程序中的PHP级别

时间:2016-08-23 14:07:23

标签: php apache .htaccess redirect mod-rewrite

我目前的HTACCESS看起来像这样。

# Run everything else but real files through index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$
RewriteRule ^(.*)$ index.php?p=$1 [NC,L,QSA]

很棒的代码,当我键入子文件夹目录时,它会将参数重定向到index.php。适用于http://localhost/blah(重定向为http://localhost/index.php?p=blah)的内容非常有用,但对于http://localhost/blah/boink则不太好。

后者的问题是重定向确实有效并且重定向到index.php,但由于某种原因,页面认为它位于子文件夹级别blah。因此,我的../jscssinclude路径的所有硬编码require_once现在在技术上都是“错误的”。无论如何解决这个问题?

在PHP中,当我尝试这样做时:

$file_url = explode("/", $_SERVER['PHP_SELF']);

// subtract 1 for left / and 1 for current file
$dir_loop = count($file_url) - 2;
$up_dirs = "";
// loop until to root directory

for ($i=0; $i<$dir_loop; $i++) {
    $up_dirs .= "../";
}

...这似乎也不起作用,因为index.php位于根文件夹级别。我怀疑这可能是一个HTACCESS问题?想法?

1 个答案:

答案 0 :(得分:0)

@Ron van der Heijden clued me into: RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$. Modified the code as follows:

# Run everything else but real files through index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} !^.*\.(js|css|png|jpe?g|gif|ico)$ [NC]
RewriteRule ^(.*)$ index.php?p=$1 [NC,L,QSA]