Remove .php extension with PHP

别来无恙 提交于 2019-11-26 06:08:10

问题


I could use some help here. I\'m using this to fix my URL but I can\'t figure out how to remove the .php extension. The URL looks like this now: http://mydomain.com/page.php/foo/123/bar/456

function decode_URL_parameters() {
   $path = @$_SERVER[\'PATH_INFO\'];
   $url_array=explode(\'/\',$path);

   array_shift($url_array);

   while ($url_array) {
      $_GET[$url_array[0]] = $url_array[1];
      array_shift($url_array);
      array_shift($url_array);
   }
}

Any ideas?

/Tobias


回答1:


If you're serving via Apache, you'll want to look at mod_rewrite.

Using mod_rewrite, you can modify how URLs are mapped to your application's actual end-points. For your example, you'll want something like this:

RewriteEngine on 
RewriteRule ^/?page/(.*)$ page.php/$1 [L]

This page has some other simple examples.




回答2:


You probably configured your webserver to let php handle all requests for files having the .php extension. Let's assume it's an apache. Then there's something like

AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml .phpt

or

<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

in one of the configuration files. The second one tells the apache that all files that match the mask .php$ should be handled by the module/handler that registered for the type application/x-httpd-php (php).
But you don't have to limit it to .php files. You can use any file mask you want. Or another directive like e.g. <Directory>.
If all files in a specific directory (and maybe its subdirectories) are php scripts you can even put an .htaccess file in that directory with

ForceType application/x-httpd-php

and the apache will treat any file as php script. ForceType overrides any previous handler settings.




回答3:


Under Apache, put a .htaccess file in the directory which contains the page.php file.

If the page.php files contains in the root dir (ie /page.php), then simply add this in your .htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /page.php?/$1 [L]

If however, the page.php files contains in lets say /a_folder/another_folder/page.php

Then you will need to put this into your .htaccess:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /a_folder/another_folder/page.php?/$1 [L]

And so on.

What does this is, it simply removes page.php from the URL. So in your case:

Instead of: http://mydomain.com/page.php/foo/123/bar/456 You can use: htp://mydomain.com/foo/123/bar/456

Have fun.




回答4:


thank you for all answers but if I use mod_rewrite then I haft to make new rules (and many) everytime I create a new page. And there is a lot of them :)

Perhaps if I redirect all urls to my index.php with .htaccess and then fix my URL there, like wordpress:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress


来源:https://stackoverflow.com/questions/1337695/remove-php-extension-with-php

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