How can I send only .php files to same page?

心已入冬 提交于 2019-12-11 06:14:43

问题


I would like to have url's like this

mysite.com/language/page/somethingelse

And processing that always in the same file which is index.php.

But only for .php files. I don't want to redirect .js or .css or .xml, image files and so on.

Plus, this project will be in a subfolder, meaning it will be inside another with no relation whatsoever. Therefore, it will be accessible like this:

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

So I suppose the .htaccess file inside mydifferentproject folder will need this line?

RewriteBase extras/mydifferentproject/

回答1:


You can have this as a .htacces

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

Catching the value after the folder

From the folder that the .htacces is in all the URL's will be caught. In order to get the path and get if it's in a folder and process it further this function will help.

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);
}

How to use

getPath($_SERVER["REQUEST_URI"]);

This will get you the string that is behind the folder it is in, so it excludes the folder it is in.


Example

.htacces: is in the folder /folder
url: example.com/folder/some/values
result of the getPath() function in index.php : /some/values as it's in the folder folder.


Not in folder

In the case that your URL example.com/index.html is, but the .htacces is in folder the behavior is just normal. (will load index.html)


Important

When loading files through a process of handeling the path, or anything you do with it. When loading requesting files in the html be sure to define the base of where he files should be loaded from, otherwise it will take the path input from above and see those as folders, and not as values or something it should not look at.

Example

<base href="/folder/">



回答2:


I could accomplish the following task send only .php files to index.php like this:

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

Now I'm able to access images and js, css, xml files, etc, by writing their real url's in the browser's navbar.

Once in index.php I'm using Nytrix's function to parse the url.



来源:https://stackoverflow.com/questions/41667483/how-can-i-send-only-php-files-to-same-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!