PHP SEO友好与干净的URL

时间:2014-04-07 08:28:58

标签: php .htaccess friendly-url

目前我的工作是将我的网站转移到SEO友好的URL(在localhost中),

这是带有查询字符串的原始网址:

http://{ip}/sitename/item.php?category=44

我想转换为:

http://{ip}/sitename/item/category/44

.htaccess 文件(与item.php相同的目录):

DirectoryIndex index.php
Options -Indexes

<files page>
ForceType application/x-httpd-php
</files>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteRule ^.*$ item.php%{REQUEST_URI} [L]
    RewriteRule ^/item/([0-9]+) /item.php?category=$1
</IfModule>

<Files *htaccess>
Deny from all
</Files>

item.php中,我使用$_GET['category']

$category = preg_replace('/[^0-9]/', '', $mysqli->real_escape_string($_GET['category']));

$list = $listing->get_items($category, $mysqli);

if($list == 0){
echo '<p><h2>Page not found</h2></p>';
die();
}

问题1: 当我加载http://{ip}/sitename/item/category/44时,页面无法将变量传递给get_item(),页面显示为Page not found?假设44返回一个值。

问题2: 我的页面没有加载引荐来源文件,所有*.css *.js等都被忽略了?

4 个答案:

答案 0 :(得分:1)

在.htaccess文件中尝试此操作:

Options +FollowSymLinks
RewriteEngine on
RewriteRule item/category/(.*) item.php?category=$1

答案 1 :(得分:0)

问题1:这里没有重写 - (你只认为它有,因为你的脚本item.php无论如何都被调用了,因为你在URL中有item并且MultiViews完成了它的工作) - RewriteRules在.htaccess中匹配的路径从不/开头,所以将其删除。

问题2:之前已经讨论了很多次(并且对于知道相对URL如何工作的基础知识的人来说也应该是显而易见的) - 参见f.e. .htaccess URL Rewrite Problem (Scripts don't load)

答案 2 :(得分:0)

问题2 - 由于您没有提到基本路径,因此出现了问题。

您需要指定基本路径来加载css和其他引用。

尝试在<head>代码<base href="http://www.MYSITE.com/" />

中使用此功能

这将加载你的css / js。

答案 3 :(得分:0)

  

RewriteEngine On   RewriteBase / sitename
  RewriteRule ^ item /([0-9] +)/?$ item.php?category = $ 1 [L,NC]