【问题标题】:Removing .php extension from URLs using .htaccess? [duplicate]使用 .htaccess 从 URL 中删除 .php 扩展名? [复制]
【发布时间】:2013-04-06 20:44:40
【问题描述】:

是否可以使用 .htaccess 文件从我的所有 URL 中删除 .php 部分?

两个例子:

http://url.com/home.php
http://url.com/shops.php

变成:

http://url.com/home/
http://url.com/shops/

所有帮助将不胜感激。

【问题讨论】:

  • 额外的意思是什么?
  • @Servant 我想将 2 个链接合并在一起,我将拥有大约 10 家商店,如果每个商店都属于一个类别会更好看,所以我不介意用里面的店名。示例:shops.php Shops-Folder>shopName1,shopName2 url.com/shops/shopname1/ url.com/shops/shopname2/
  • 什么?你想把 /$var1/$var2.php 改写成 /$var1/$var2/ 吗?
  • @Servant 我认为这很难解释而且不可能。感谢您抽出宝贵时间,但我会编辑额外的内容。
  • 不,有可能……我试试,等我的回答……

标签: php .htaccess friendly-url clean-urls


【解决方案1】:

/$var/重写为/$var.php,然后将/$var.php重定向到/$ var/ 只需在你的 .htaccess 文件中使用这些指令:

# once per htaccess file
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-_]+)/? /$1.php
RewriteRule ^([a-z0-9-_]+).php$ /$1/ [R]

而如果你还想把具体的网址/shops/shopName1/改写成具体的网址/shopName1.php然后重定向/shopName1.php 进入 /shops/shopName1/ 那么你应该使用下面的代码而不是上面的代码:

# once per htaccess file
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z0-9-_]+)/?$ /$1.php

RewriteCond %{REQUEST_URI} !^/shopName1.php$
RewriteRule ^([a-z0-9-_]+).php$ /$1/ [R]

RewriteRule ^shops/shopName1/?$ /shopName1.php
RewriteRule ^shopName1.php$ /shops/shopName1/ [R]

但请记住,/shops/shopName1/ 上没有变量,如果您愿意,请尝试一下..


DirectoryIndex home.php 的重定向似乎存在问题。但我认为,这是您想要的代码,但这次我们排除了任何重定向:

DirectoryIndex /home.php
Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/shopName1/?$
RewriteCond %{REQUEST_URI} !^/shopName2/?$
RewriteCond %{REQUEST_URI} !^/shopName3/?$
RewriteCond %{REQUEST_URI} !^/shopName4/?$
RewriteCond %{REQUEST_URI} !^/shopName5/?$
RewriteRule ^([a-zA-Z0-9-_]+)/?$ /$1.php

RewriteRule ^shops/shopName1/?$ /shopName1.php
RewriteRule ^shops/shopName2/?$ /shopName2.php
RewriteRule ^shops/shopName3/?$ /shopName3.php
RewriteRule ^shops/shopName4/?$ /shopName4.php
RewriteRule ^shops/shopName5/?$ /shopName5.php

只需使用您的逻辑添加更多条件和规则..

【讨论】:

    【解决方案2】:

    我建议停止对页面使用常规 .php 文件,而不是使用框架或请求路由器,但是,如果您确实想这样做,那么为了将 shops.php 转换为 shops,您需要创建一个 .htaccess 文件并向其中添加以下内容:

    RewriteRule (.*) $1.php [L]
    

    这会将 URL 栏上的所有 something.php 重命名为 something

    完整的.htaccess 文件示例如下:

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

    【讨论】:

    • 我还要在这些行之前写RewriteEngine on吗?
    • 在这两行之前是RewriteEngine On
    • 我添加了一个完整的 .htaccess 文件示例。
    • @Askp Foe 好的,这是我完整的 .htaccess 文件:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !\.php$ [NC] RewriteRule ^/?(.*)$ $1.php [L,R=301] </IfModule> DirectoryIndex home.php 我不断收到这个:http://rahulkhosla.co.uk/home/.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php.php
    • 我只编辑了 10 次,但无法了解
      的工作方式,不便之处请见谅..
    【解决方案3】:

    这应该可行:

    RewriteEngine On
    RewriteRule \/([^\/]+)\/$ $1.php
    

    它将为您提供以 url 的最后一段命名的文件:

    http://example.com/shops/shopname1/ -> shopname1.php

    http://example.com/shops/ -> shop.php

    【讨论】:

      【解决方案4】:
      RewriteRule ^/(home|shops) /$1.php
      

      第二个手册

      RewriteRule ^/shops/shopname1/ /whateveryouneed.php
      

      【讨论】:

        猜你喜欢
        • 2017-09-26
        • 2022-01-21
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        相关资源
        最近更新 更多