【问题标题】:Remove index,index.php error handle with trailing slash PHP Htaccess删除带有斜杠 PHP Htaccess 的 index,index.php 错误句柄
【发布时间】:2018-01-29 11:57:33
【问题描述】:

我需要一些有关我的 Htaccess 代码的帮助。

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule (.*)\.php$ $1 [R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L,QSA]

我的目录结构是:

Public_Html

  css/style.css
   img/icon.png
   /2/user.php
  index.php
  create.php

现在上面的 htaccess 代码正在从 URL 中删除 .php 扩展名。

示例

 -> example.com/index.php -> example.com/index
 -> example.com/2/user.php -> example.com/2/user

此 Htaccess 文件存在问题

  1. 我也想隐藏索引 示例:example.com/index -> example.com

  2. 如果用户键入 example.com/index.php,那么他应该被重定向到 example.com

  3. 如果用户输入不存在的东西,那么它应该指向 example.com

    示例: example.com///*/// -> example.com

  4. 当它删除 .php 扩展名时,应在末尾添加一个斜杠。

示例: example.com/create.php -> example.com/create/

  1. 如果用户想访问create.php并在最后输入/create without /,那么它应该会自动添加。

    示例: example.com/create -> example.com/create/

换句话说,如果在删除 .php 之后,它们的工作方式相同

**Example:** example.com/create = example.com/create/
  1. 但用户应该仍然可以访问该目录

    示例: example.com/2 -> example.com/2/

    这里的 2 是一个文件夹。

我对这个 htaccess 脚本有一些问题。我在 Google 和 Stack Overflow 上搜索了很多,但仍然找不到任何解决方案。

*这不是一个重复的问题。在将其标记为重复之前,请仔细检查。如果你能帮助我,我会很高兴。

【问题讨论】:

    标签: php .htaccess mod-rewrite


    【解决方案1】:

    这里有你需要的一切,所有问题都有代码、信息和示例来回答!为每个步骤提供 1 个步骤,然后提供整个代码!


    1-) 解析.php 扩展名

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

    如果您转到example.com/userexample.com/user.php 将起作用


    2-) 将不存在的错误链接重定向到 example.com

    如果用户键入一个不存在的链接,例如example.com///*,用户将被自动重定向到example.com

    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
    

    3-) 重定向 example.com/index.php example.com/index example.com

    RewriteCond %{THE_REQUEST} /index(\.php)?[/?\s] [NC]
    RewriteRule ^(.*?)index(?:\.php)?$ /$1 [L,R=301,NC,NE]
    

    4-) 如果不是目录,则删除尾部斜杠,否则添加

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

    如果您在普通文件后添加了斜杠,则会将其删除。如果它是一个目录并且有,它将保留。如果没有,则会自动添加一个斜杠。

    您将能够访问目录!


    5-) 从 URL 中删除 .php(重定向到不带 .php 的文件名)

    RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC]
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE]
    

    .htaccess 的全部代码

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [R=301,L]
    
    RewriteCond %{THE_REQUEST} /index(\.php)?[/?\s] [NC]
    RewriteRule ^(.*?)index(?:\.php)?$ /$1 [L,R=301,NC,NE]
    
    RewriteCond %{THE_REQUEST} \.(php|cfm)[\s?] [NC]
    RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
    RewriteRule ^(.+?)\.(cfm|php)$ /$1 [R=301,L,NE]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php [L]
    
    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
    

    我希望这对你有所帮助。

    乐于助人,享受!

    【讨论】:

    • 它的代码很好,但它不能完全根据问题问题工作。 1. 当我打开 example.com/2/ 时,它应该显示名为 one 的文件夹的内容,但它显示的是 home。 2. 当我打开 example.com/index 时,它应该隐藏索引。如果这些问题都解决了,那么代码就很棒了。感谢回复和编辑。请帮我解决这些问题。
    • @Kim 检查新代码,仔细阅读并在询问之前进行测试!我已经根据您的所有问题和要求编辑了整个答案。花了很多时间把它们放在一起。告诉我进展如何!
    • 当有人键入 www.example.com/create.php 然后它没有隐藏 .php 时,它的工作但只是小问题。例如- www.example.com/create.php -> www.example.com/create.php 而不是这个,它应该这样做 www.example.com/create.php -> www.example.com/create 。如果您只解决最后一个查询,此代码会更好。谢谢你帮助我。顺便说一句,我在您的网站上创建了帐户。如果可以,请解决此问题。
    • @Kim 我再次为您编辑了我的答案,现在如果他们加载 example.com/user 它将起作用,如果他们转到 example.com/user.php,他们将被重定向到 example。 com/用户
    • 非常感谢。它工作正常。我在你的网站上注册了,请查看我的电子邮件,如果可能的话,给我发消息。
    猜你喜欢
    • 2011-03-02
    • 2012-06-17
    • 2019-03-28
    • 2014-03-04
    • 2011-12-09
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多