使用mod_rewrite删除.php扩展名

我想要一个mod_rewrite规则集,所以我可以引用一个没有.php扩展名的页面,但是重写了包含php扩展名。 这将在1和1服务器上运行。

有没有什么好的参考资料,让我可以更多地了解自己?

RewriteEngine On RewriteRule something something.php [L] 

http://example.com/something将被处理,就像它是对something.php的请求一样

要将所有不是物理文件的请求redirect到相同的名称,但使用.php:

 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) $1.php [L] 

上面接受的答案并没有删除从URL的.php扩展它只是允许您访问.php文件没有扩展名。 要从URL完全删除.php扩展名,可以在root/.htaccess使用以下规则:

 RewriteEngine on #1)externally redirect "/file.php" to "/file" RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule ^ /%1 [NC,L,R] #2)Internally map "/file" back to "/file.php" RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*?)/?$ /$1.php [NC,L] 

.htaccess文件:添加下列行:

 Options +MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] 

https://alexcican.com/post/how-to-remove-php-html-htm-extensions-with-htaccess/

现在,您将需要检查apache2.log文件中的AllowOverride条件:在Web根目录中设置选项AllowOverRide All

  Options Indexes FollowSymLinks AllowOverride All Require all granted 

如果您尝试访问不带.php扩展名的网页,则可能会在apache error.log文件中遇到以下错误:/var/www/html/web/.htaccess:无效的命令“RewriteEngine”,可能是拼写错误或定义错误通过一个不包含在服务器configuration中的模块

要解决这个问题:你没有安装mod_rewrite模块,要安装它:运行以下命令:ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

.htaccess:无效的命令“RewriteEngine”,可能是拼错的或由未包含在服务器configuration中的模块定义

同样,在刷新网页之后,您可能会在error.log文件中看到以下错误:

 [negotiation:error] [pid 4650] [client 127.0.0.1:46461] AH00687: Negotiation: discovered file(s) matching request: /var/www/html/web/test (None could be negotiated). (I was trying to access localhost/web/test.php using the url: localhost/web/test) 

要解决这个问题,你必须在apache2.conf中添加以下几行:

 <IfModule mod_mime.c> AddType application/x-httpd-php .php AddType application/x-httpd-php .phtml AddType application/x-httpd-php .php3 AddType application/x-httpd-php .php4 AddType application/x-httpd-php .html AddType application/x-httpd-php-source .phps 

https://forums.digitalpoint.com/threads/htaccess-addtype-application-x-httpd-php-php-htm-html-and-maybe-a-fix.7584/#post-2491687

现在,我可以使用文件名test来访问test.php文件

也许你真正想要的只是一个没有后缀的方法。 我发现这样做的最好方法是在.htaccess或apacheconfiguration文件中使用Files指令:

 <Files myscript> SetHandler cgi-script </Files> 

这避免了重写的一些缺点,例如直接访问.php文件。

获取http://example.com/test链接http://example.com/test.php使用:;

 RewriteEngine on RewriteRule ^([^\.]+)$ /folder/$1.php [NC,L] 

出于某种原因,我无法得到任何其他解决scheme正常工作。 我把它放在我的网站根目录下的.htaccess文件中。 希望这会为你工作。

 RewriteEngine on #only use this once per .htaccess RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^(.*)$ $1.php 

请务必记住,如果您的标头或url包含.php扩展名,则不会被删除。 你需要删除扩展名。

用这个…

 header 'location: /login'; 

而不是这个…

 header 'location: /login.php'; 

为了引导几个单独的文件,避免使用RewriteEngine可能更容易。

我用过这个:

 <Files $filename> SetHandler application/x-httpd-php </Files> 

这不像重写那样强大和灵活,但可能更快,如果你希望只有几个特定的​​文件作为PHP处理,似乎是一种方式。

这个选项将使干净的SEO友好的URL。 从可见的URL中删除.php扩展名,并确保在没有.php的情况下访问URL仍然会显示.php文件。 我无法find在多个线程上实现此目标的另一个答案。

记得启用国防部重写。 在Debian或者Unbuntu linux上,以下内容可以工作

sudo a2enmod重写

sudo服务apache2重启

将您的apache2.conf文件的相应部分修改为以下内容。

 <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) $1.php [L] RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC] RewriteRule ^ /%1 [NC,L,R] </Directory> 

如果使用.htaccess重新写入,请确保apache2.conf至less启用了这些选项。

 <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted RewriteEngine On </Directory> 

最后,在某些Apache安装中,您可能还需要将/etc/apache2/ sites-available或/ etc / apache2 / sites-enabled中的AllowOveride All设置为.conf文件。
据传从apache2.conf文件重写,而不是.htaccess更快。