我刚刚在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]
关于如何解决这个非常恼人的问题的任何建议?
答案 0 :(得分:3)
您没有使用htaccess执行此操作,您使用应用删除扩展程序,并使用htaccess将无扩展名网址映射到实际文件。这个规则
# Remove file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]
说,&#34;如果请求的资源不作为文件存在,请查找具有.php
扩展名的资源&#34;。因此,您从应用程序中的所有链接中删除扩展名,此规则将使php文件在没有扩展名的情况下运行。你的htaccess很好,你需要更新你的应用程序。
答案 1 :(得分: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应该是什么。
答案 2 :(得分:1)
# 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>
答案 3 :(得分:0)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^\.]+)/$ $1.php
答案 4 :(得分: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
答案 5 :(得分:-1)
我正在做的方式。
RewriteEngine on
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://domainname.com/$1 [R=301,L]