使用尾部斜杠PHP Htaccess删除索引,index.php错误句柄

时间:2017-08-21 12:01:23

标签: php .htaccess mod-rewrite

我的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扩展名时,应该在末尾添加一个尾部斜杠。

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

    1. 如果用户想要访问create.php并在结尾输入/create without /,则应自动添加。

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

    2. 换句话说,如果在删除.php之后这两个都是相同的

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

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

        这里2是一个文件夹。

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

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

1 个答案:

答案 0 :(得分:1)

以下是您需要的一切,所有问题都可以通过代码,信息和示例来解答!为每个人提供1步1,然后提供整个代码!

1-)解析.php扩展名

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
如果您转到example.com/user.php

example.com/user将会有效

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>

我希望这对你有帮助。

乐意帮助,享受!