url重写不在one.com提供商上工作

时间:2014-08-24 23:53:04

标签: php apache .htaccess mod-rewrite url-rewriting

目前我正在尝试将url重写为one.com托管服务提供商,这是一个痛苦和支持,不理解这个问题,所以我想在这里问你是否可以帮助我找到问题。

我正在使用这个rewriterule,它在localhost上运行,但不在提供程序中运行:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?key=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?key=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?key=$1&seo=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ index.php?key=$1&seo=$2

</IfModule>

RewriteCond %{HTTP_HOST} ^mysite\.com
RewriteRule ^(.*)$ http://www\.mysite.com/$1 [R=permanent,L]

并在索引中:

if($key=='post') //Cant include $seo here because the variable differ for 
                 //each post on the site
{
include('post.php'); // Post page
}

然后在post.php ofc中,我带seo GET variable在页面上显示帖子内容。

完整网址www.mysite.com/post/test-test-test

我最终得到的错误是404

Not Found

The requested URL /post/test-test-test.php was not found on this server.

所以基本上我理解的是它试图输入一个名为/post/的文件夹并查找文件test-test-test.php

所以我相信它不包含重写规则,或者你能在重写规则中找到一个在localhost上工作的错误吗?

1 个答案:

答案 0 :(得分:1)

您需要重新排列规则并添加.php扩展名,以确保存在.php的文件:

<IfModule mod_rewrite.c>

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L,NE]

# ignore rest of the rules for files and directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([\w-]+)/?$ index.php?key=$1 [L,QSA]
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?key=$1&seo=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

</IfModule>