如何只将.php文件发送到同一页面?

时间:2017-01-15 23:23:47

标签: php apache .htaccess url-rewriting

我想让网址像这样

mysite.com/language/page/somethingelse

始终在index.php的同一文件中进行处理。

但仅适用于.php个文件。我不想重定向.js.css.xml,图片文件等。

另外,这个项目将在一个子文件夹中,这意味着它将在另一个内部,没有任何关系。因此,它可以这样访问:

mysite.com/extras/mydifferentproject/language/page/something else

所以我想.htaccess文件夹中的mydifferentproject文件需要这行吗?

RewriteBase extras/mydifferentproject/

2 个答案:

答案 0 :(得分:2)

您可以将其设为.htacces

RewriteEngine On
RewriteRule ^(?!index\.php$). index.php [NS,L,DPI]

捕获文件夹

之后的值

将会抓住.htacces中所有URL's所在的文件夹。为了获得路径并获取它是否在文件夹中并进一步处理它,这个功能将有所帮助。

function getPath($path){
    $called = __FILE__;
    $called_dir = str_replace("\\","/",pathinfo($called)["dirname"]);
    $root = str_replace($_SERVER["DOCUMENT_ROOT"], "",$called_dir);
    $from = '/'.preg_quote($root, '/').'/';
    return preg_replace($from,"",$path,1);
}

如何使用

getPath($_SERVER["REQUEST_URI"]);

这将为您提供它所在文件夹后面的字符串,因此它会排除它所在的文件夹。

示例

.htacces :位于/folder文件夹中 网址example.com/folder/some/values
getPath() index.php/some/values函数的 结果 as它位于folder文件夹中。

不在文件夹

如果您的网址为example.com/index.html,但.htacces位于folder,则行为正常。 (将加载index.html)

重要

通过处理路径或使用它执行的任何操作来加载文件。在html中加载请求文件时,请务必定义应加载文件的base,否则将从上方输入path并将其视为文件夹,不是价值或不应该看的东西。

实施例

<base href="/folder/">

答案 1 :(得分:0)

我可以完成以下任务仅发送.php个文件到index.php ,如下所示:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]

现在我可以通过在浏览器的导航栏中写下他们的真实网址来访问图像和js,css,xml文件等。

进入 index.php 后,我正在使用Nytrix的函数来解析网址。