目前我正在尝试将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上工作的错误吗?
答案 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>