从URL中删除.php - 特定情况

时间:2015-02-11 16:00:32

标签: php apache .htaccess mod-rewrite

这是我的.htaccess文件,到目前为止一切正常但我无法从文件中删除.php扩展名,我尝试从其他答案中提取的每个代码只丢了500或404错误。请告知添加的位置和内容。文件夹的结构是localhost / myfolder / somefile.php

要清楚 - localhost / myfolder /是我项目的根目录。

RewriteEngine On     

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /myfolder/$1/ [L,R=301]

RewriteRule     ^team-news/([0-9]+[/])?$    posts.php?p=$1&cat=Team\ News
RewriteRule     ^product-news/([0-9]+[/])?$    posts.php?   p=$1&cat=Product\ News
RewriteRule     ^member-specials/([0-9]+[/])?$    posts.php?p=$1&cat=Member\ Specials
RewriteRule     ^ambassador-blogs/([0-9]+[/])?$    posts.php?p=$1&cat=Ambassador\ Blogs
RewriteRule     ^user/([0-9]+[/])?$         profile.php?id=$1
RewriteRule     ^browse-all/([0-9]+[/])?$   searchall.php?p=$1
RewriteRule     ^edit/([0-9]+[/])?$         edit.php?id=$1
RewriteRule     ^articles/([0-9]+[/])?$     post.php?id=$1    

4 个答案:

答案 0 :(得分:1)

此代码段允许您重写以删除php个扩展程序:

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

如果您希望自己的网址有/,则可以使用此代码段:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/$ $1.php
RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

Source

答案 1 :(得分:0)

删除扩展名,说;浏览器中的php或html会让浏览器找到更多的工作来查找源文件。如果您需要,以下内容可能对您有所帮助:

更新:

<强> PHP:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)/$ /$1.php

<强> HTML:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)/$ /$1.html

那些将删除文件中的所有扩展名(php和html)。 注意:查看服务器是否启用了mod重写模块/扩展程序

答案 2 :(得分:0)

301规则的正下方添加此规则:

RewriteEngine On
RewriteBase /myfolder/

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php[\s?] [NC]
RewriteRule ^ %1 [R=302,L,NE]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

答案 3 :(得分:0)

您应该使用两个.htaccess个文件。第一个应该放在localhost根目录中(将请求重定向到myfolder),第二个应该进入myfolder(以匹配PHP文件的路由):

.htaccess

RewriteEngine On     

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /myfolder/$1/ [L,R=301]

myfolder .htaccess

RewriteEngine On
RewriteBase /myfolder/

RewriteRule ^team-news/([0-9]+[/])?$         posts.php?p=$1&cat=Team\ News [L]
RewriteRule ^product-news/([0-9]+[/])?$      posts.php?p=$1&cat=Product\ News [L]
RewriteRule ^member-specials/([0-9]+[/])?$   posts.php?p=$1&cat=Member\ Specials [L]
RewriteRule ^ambassador-blogs/([0-9]+[/])?$  posts.php?p=$1&cat=Ambassador\ Blogs [L]
RewriteRule ^user/([0-9]+[/])?$              profile.php?id=$1 [L]
RewriteRule ^browse-all/([0-9]+[/])?$        searchall.php?p=$1 [L]
RewriteRule ^edit/([0-9]+[/])?$              edit.php?id=$1 [L]
RewriteRule ^articles/([0-9]+[/])?$          post.php?id=$1 [L]

请注意我已经包含[L]以阻止它在找到匹配项后执行任何其他操作。