删除扩展名为.php,但现在它说的页面不存在

问题描述 投票:0回答:1

我能得到的.PHP把我的文件,但现在,当我去到他们的页面不存在(和它的强制WordPress的404页,当目标文件实际上是在服务器上的WordPress之外)。我认为这个问题可能是,它是与WordPress在服务器上,这些文件所在的字按之外。有已经重写WordPress的规则,也许它与其他文件我重写规则相冲突?

.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Remove .php extension on files outside of wordPress
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php [L]

# Force trailing slash
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule .*[^/]$ $0/ [L,R=301]

UPDATE - 完全的.htaccess

# BEGIN WP Hide & Security Enhancer
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase / 
#WriteCheckString:1548706048_68906
RewriteRule .* - [E=HTTP_MOD_REWRITE:On]

RewriteRule ^site(.*) /wp-login.php$1 [L,QSA]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^wp-login.php /index.php?wph-throw-404 [L]


RewriteCond %{REQUEST_URI} /enter$
RewriteRule ^(.*)$ /enter/ [R=301,L]
RewriteRule ^enter(.*) /wp-admin$1 [L,QSA]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^wp-admin(.+) /index.php?wph-throw-404 [L]

</IfModule> 

# END WP Hide & Security Enhancer




# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
php wordpress .htaccess
1个回答
0
投票

你需要做这样的事情

#remove all PHP extensions from the url
RewriteCond %{THE_REQUEST} ^GET\ /[^?\s]+\.php
RewriteRule (.*)\.php$ /$1/ [L,R=301] #end and redirect


# Force trailing slash ( probably no longer needed, because `/$1/` )
#RewriteCond %{REQUEST_FILENAME}.php -f
#RewriteRule .*[^/]$ $0/ [L,R=301]

#add .php back in and continue.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.+)/$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*)/$ $1.php  #no last flag as we can now continue to WP with our nice php extensions back on

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

我假设这些重写规则是正确的。我得看看他们我还没有大量使用重写工作了几年。基本上

  • 第一去除任何PHP扩展和重定向(如果它们存在)
  • 在一个重定向(或不.PHP的请求)加回PHP扩展到它被删除,所以你可能需要%{REQUEST_FILENAME} !-d只是为了安全起见这些网址。
  • 进行正常

正如一般的经验法则,最好做重定向第一。这样,你可以得到与工作的最短的重定向。一个重定向就是像改变URL,然后将在浏览器中,并重新运行(即一个全新的要求)。

另一种方式做,这是对特定的文件夹的所有请求重定向到您的决策具有路由器的index.php文件。

像这样的(即我为例进行)

https://github.com/ArtisticPhoenix/MISC/tree/master/Router

然后你的网址,可就是这样

http://yourdomain.com/somedir/index.php/controller/method/...args
#or without the index.php
http://yourdomain.com/somedir/controller/method/...args

然后,在.htaccess中你会做的是去除的index.php

 #remove index.php and redirect
 RewriteRule somedir/index.php/(.+)/?$ /somedir/$1/ [L,R=301] #end and

 #add index.php back in
 RewriteRule somedir/(.+)/?$ /somedir/index.php/$1/ [L] 

 //wordpress stuff

关于路由器的好处是你从来没有接触.htaccess中,并用文件夹名称键就应该让事情变得更简单。

使用路由器和示例文件:

 http://yourdomain.com/somedir/user/login

应该去Controllers/user.php方法login

© www.soinside.com 2019 - 2024. All rights reserved.