重写在localhost上工作但不在服务器上工作

时间:2017-08-29 08:49:20

标签: php linux apache .htaccess mod-rewrite

我正在我的服务器上传我的网站。上面的重写规则正在我的localhost上运行。 URL“mywebsite.com/about”为我提供了“mywebsite.com/about.php”。但奇怪的事情发生了。

我的htaccess文件有正确的自动化,我知道因为其他规则(例如deflate)工作正常。

mod_rewrite已启用,我知道因为我的一些规则正在运行。但是,并非所有内容:当输入“mywebsite.com/about”或“mywebsite.com/about.php”时,我会被重定向到“mywebsite.com/about”,但它会显示404错误。

ErrorDocument 404 /includes/404.php
Options +FollowSymlinks
Options +MultiViews
DefaultType application/x-httpd-php

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteRule ^$ /en [L]
    ### to hide '.php' extensions
    # Unless directory, remove trailing slash
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^/]+)/$ mywebsite.com/$1 [R=301,L]

    # Redirect external .php requests to extensionless url
    RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
    RewriteRule ^(.+)\.php$ mywebsite.com/$1 [R=301,L]

    # Resolve .php file for extensionless php urls
    RewriteRule ^([^/.]+)$ $1.php [L]
###
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

</IfModule>

我真的很想帮助找到我出错的地方!

修改

我尝试访问的网页实际上是“mywebsite.com/en/about.php”,网址为“mywebsite.com/en/about”

编辑2:

我在.htaccess上留下了这条线:

# Resolve .php file for extensionless php urls
    RewriteRule ^([^/.]+)$ $1.php [NC,L]

它的作用是:严格禁止......如果我理解得很好,那么应该重定向URL而不扩展它的.php版本。当我去mywebsite.com/en/about时,我得到了404。

编辑3:

使用此其他脚本会产生相同的结果:重写“mywebsite.com/en/about”中的URL正在运行,但它不会重定向到.php版本。

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]


# Resolve .php file for extensionless php urls
    RewriteRule ^([^/.]+)$ $1.php [NC,L]

0 个答案:

没有答案