Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
htaccess url转发到php文件(带或不带尾随斜杠)_Php_.htaccess_Rewrite_Hyperlink - Fatal编程技术网

htaccess url转发到php文件(带或不带尾随斜杠)

htaccess url转发到php文件(带或不带尾随斜杠),php,.htaccess,rewrite,hyperlink,Php,.htaccess,Rewrite,Hyperlink,我一直在寻找这样的东西(当然是有效的)多年了。如果有人最终能写出这段代码,那就太好了 目前,我一直在处理这个问题: Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] RewriteRule ^(.*)\/$ $1.php [NC] 它工作得很好,但如果没有一个尾随斜杠

我一直在寻找这样的东西(当然是有效的)多年了。如果有人最终能写出这段代码,那就太好了

目前,我一直在处理这个问题:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
RewriteRule ^(.*)\/$ $1.php [NC]
它工作得很好,但如果没有一个尾随斜杠就不能工作。令人恼火的是,它将所有包含的文件都转发到一个文件夹中,因此我将永远向所有css和js文件添加
。/

除上述内容外,其工作原理如下(如预期):

  • 如果www不存在,则会添加此项
  • 将转到page.php
  • 将转到page.php
  • 将在查找文件夹时出现404错误
  • 我通过谷歌搜索尝试了很多不同的东西,但都没有成功。我所需要做的就是喜欢没有尾随斜杠的url,不管它是以这种方式将其转发到尾随斜杠,还是两者都喜欢。整个想法是让它读取一个.php文件并在窗口中显示为一个漂亮的SEO类型链接:www.example.com/page

    Options+FollowSymlinks
    
    Options +FollowSymlinks
    RewriteEngine On
    DirectorySlash Off
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^example.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
    RewriteRule ^(.*)\/(\?.*)?$ $1$2 [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ $1.php [NC]
    
    <IfModule mod_rewrite.c>
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    重新启动发动机 目录删除 重写基/ RewriteCond%{HTTP_HOST}^example.com$[NC] 重写规则^(.*)$http://www.example.com/$1[R=301,L] 重写规则^(.*)\/(\?.*)$$1$2[R=301,L] 重写cond%{REQUEST_FILENAME}-F 重写规则^(.*)$$1.php[NC] 重写规则^index\.php$-[L] 重写cond%{REQUEST_FILENAME}-F 重写cond%{REQUEST_FILENAME}-D 重写规则/index.php[L]

    这很有效。回答这个问题。有人能改进这个吗?

    ^(.*)\/$
    当我删除这个时,我得到一个内部服务器错误,这是因为
    ^(.*)$
    将匹配所有内容,因此将
    .php
    附加到路径的无限循环将一次又一次发生。最简单的方法可能是使用
    RewriteCond%{REQUEST_FILENAME}-f
    ,这样只有当路径不存在时才会发生重写,当您查找
    /page
    /page/
    时,两个页面都找不到,但是当您键入
    /page.php
    时,当我将其更改为
    RewriteCond%{REQUEST\u FILENAME}时,错误404表示它正在查找
    /page.php.php
    -f
    它与
    /page.php
    /page
    一样工作得很好,但是
    /page/
    发生了一个内部服务器错误,我非常希望有一个自定义的404页面指向/404.php,但是重写规则不允许这种情况发生,但问题是,如果我删除它,我会得到一个内部服务器错误。