5

我刚刚在 Ubuntu 12 上完成了 LAMP 堆栈的安装,并且遇到了 Apache 的 .htaccess 文件的问题。我启用了重写和重定向模块,并且 .htaccess 文件正在工作(如果不存在“www”,URI 将重定向到“www”),但无论我尝试什么,我都无法删除文件扩展名. 我已经尝试了该<Files>指令,但没有成功。我当前的文件包含以下内容:

RewriteEngine On

# Remove file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*)$ $1.php [L]

# Force www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

关于如何解决这个非常烦人的问题的任何建议?

4

6 回答 6

3

您不使用 htaccess 来执行此操作,而是使用您的应用程序删除扩展名,并使用 htaccess 将无扩展名的 url 映射到真实文件。这条规则

# Remove file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

说,“如果请求的资源不作为文件存在,请查找具有.php扩展名的资源”。因此,您从应用程序中的所有链接中删除扩展名,此规则将使 php 文件在没有扩展名的情况下运行。您的 htaccess 没问题,您需要更新您的应用程序。

于 2012-11-24T10:35:21.003 回答
2
# Apache Rewrite Rules
 <IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

# Add trailing slash to url
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/|#(.*))$
  RewriteRule ^(.*)$ $1/ [R=301,L]

# Remove .php-extension from url
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^([^\.]+)/$ $1.php 

# End of Apache Rewrite Rules
 </IfModule>
于 2012-11-24T10:36:42.030 回答
2

我非常成功地使用了另一种htaccess替代方法:

Options +FollowSymLinks

Options -Indexes

RewriteEngine On

RewriteRule ^purchase-jelly-babies$ /modules/products/jelly_babies.php [L]

RewriteRule ^/lets/use/an/asp/extension.asp$ /modules/test/asp_example.php [L]

这种方法不仅可以解决您的 PHP 扩展问题,还可以让您保持文件井井有条,无论那些 SEO 白痴告诉您 URL 应该是什么。

于 2013-07-02T14:20:50.473 回答
0
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php 
于 2012-11-24T10:48:36.127 回答
0

请尝试此代码并告诉我它的性能。

  RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)/$ $1.php

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)/$ $1.html

RewriteCond %{REQUEST_FILENAME}.py -f
RewriteRule ^(.*)/$ $1.py
于 2015-06-02T07:58:54.187 回答
-1

我这样做的方式。

RewriteEngine on
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://domainname.com/$1 [R=301,L]
于 2014-07-09T12:26:12.240 回答