我刚刚在Ubuntu 12上安装了LAMP堆栈,并且遇到了Apache的.htaccess文件的问题。 我已经启用了重写和redirect模块,并且.htaccess文件正在工作(如果没有“www”,URI将redirect到“www”),但不pipe我尝试什么,我都无法删除文件扩展名。 我已经试过了<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]
任何build议如何解决这个非常恼人的问题?
您不使用htaccess来执行此操作,您可以使用您的应用程序删除扩展名,并且htaccess将无扩展名的网址映射到真实文件。 这个规则
# Remove file extension RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*) $1.php [L]
说:“如果请求的资源不存在作为一个文件,寻找扩展名为.php
的资源”。 所以你从你的应用程序的所有链接中删除扩展名,这个规则将使php文件运行没有扩展名。 你的htaccess很好,你需要更新你的应用程序。
还有另外一个我用得很成功的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应该是什么。
# Apache Rewrite Rules <Ifmodulee 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 </Ifmodulee>
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)/$ $1.php
请尝试这个代码,并告诉我它的性能。
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
这样做的方式。
RewriteEngine on RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ RewriteRule ^(.+)\.php$ http://domainname.com/$1 [R=301,L]