2014-10-19 59 views
1

感谢您的帮助,我可以创建一个.htaccess,将动态链接重写为静态链接。现在我想将该解决方案扩展到整个站点,以便根据$ _get变量加载准确的模块。然后感谢.htaccess我应该能够做出友善的链接。唯一的问题是...它不工作...它显示我一个错误:使用htaccess创建seo友好链接时出现403错误

403禁止 您没有权限访问此文档。

我使用这个脚本重写链接:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 
RewriteBase /mod1/ 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/mod1/index.php\?module=([^\s&]+) [NC] 
RewriteRule^/mod1/%1? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteRule ^mod1/([^\s&]+)?$ mod1/index.php?module=$1 [L,QSA] 

现在我使用的文件夹MOD1但通常我想有就有一个域名,以便它具有:

www.domain.com/index.php?module=create_list

被重定向到:

www.domain.com/create_list

我在网上发现了一个信息,我应该将目标文件(这是我的例子中的索引)的权限更改为755,但在我的情况下不起作用。 该脚本的另一个秘密是第一部分似乎工作,但我不知道为什么它总是在最后给出url“/”,即使我没有在规则中定义它。

任何帮助表示赞赏。

编辑:

我设法解决与商场更改脚本问题:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 

RewriteBase /mod1/ 

#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/mod1/index.php\?module=([^\s&]+) [NC] 
RewriteRule^%1.html? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteRule ^([^/]+).html?$ index.php?module=$1 [L,QSA] 

据工作poperly。但我仍然不明白几件事情。首先,如果我从删除#:

#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 

的[L,QSA]起作用但permament [R = 302,L]不,我明白,这两个线是用于与该PHP中使用的文件文件,他们解决了路径问题。但是,如何让他们一起工作,永久重定向302?

第二件事是我需要在静态链接的末尾添加.html,这不是我计划的一部分。是否有可能使它没有.html扩展名的工作?

回答

-1

如果你想有一个以上的变量来自搜索引擎的网址传回给你的index.php,你可以这样做:

Options +FollowSymlinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule ^([^/]+)$ index.php?module=$1 
RewriteRule ^([^/]+)/([^/]+)$ index.php?module=$1&var2=$2 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?module=$1&var2=$2&var3=$3 

确保把那个.htaccess文件在你的MOD1 /目录并删除旧的。

如果您访问/mod1/search,请求将以index.php?module=search结束。

/mod1/search/Books =>index.php?module=search&var2=Books

mod1/search/Books/20 =>index.php?module=search&var2=Books&var3=20

我看不出任何一点,你为什么会重定向到/mod1/index.php?module=something因为/mod1/something这将导致无休止的

  1. 用户发送/mod1/index.php?module=something =>服务器将其重定向到/mod1/something
  2. 用户发送/mod1/something =>服务器重定向到/mod1/index.php?module=something

等等......更何况,你会从来看搜索引擎的点结束复制的内容。

编辑1: 如果你想尾随斜线可选,只是追加/?在重写规则的末尾:

RewriteRule ^([^/]+)/?$ index.php?module=$1 
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?module=$1&var2=$2 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?module=$1&var2=$2&var3=$3 
+0

嘿,谢谢你的答案,但遗憾的是它并没有解决我的问题,因为现在它不重写的URL。另外我有一个url ..mod1/index.php?module = create_list,但它不显示正确的内容。这似乎是PHP不接收GET变量。 – user1857756 2014-10-19 20:59:02

+0

我刚刚编辑了我的答案。为什么你需要将/mod1/index.php?module = something'重定向到'/ mod1/something'? – 2014-10-20 05:57:07

+0

我想将动态链接重定向到静态以避免重复的内容,以防有人使用这种方式访问​​它 - 至少这是我的假设。这是错的吗?我用你的代码,不幸的是,它仍然没有解决问题仍然链接:[链接](/ MOD1 /东西)给我403错误 - “禁止 - 你没有权限访问这个文件”(我已经把它在文件夹mod1中)。是否有可能在index.php中包含来自不同文件夹的文件中的错误与php相关?因为我想出了为什么这个“简单”重定向不起作用的想法... – user1857756 2014-10-20 16:06:57