使用htaccess创建seo友好链接时出现403错误


403 error while using htaccess to make seo friendly links

多亏了你们的帮助,我能够制作一个.htaccess,将动态链接重写为静态链接。现在,我想将该解决方案扩展到整个站点,以便基于$_get变量加载准确的模块。然后感谢.htaccess我应该能够使seo友好的链接。唯一的问题是…它不起作用。。。它显示了一个错误:

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=创建列表

要重定向到:

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]

它正在流行。然而,我仍然不明白一些事情。首先,如果我从中删除#

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

[L,QSA]仍然有效,但置换[R=302,L]无效,我知道这两行是用于php文件的文件,它们解决了路径问题。但是如何使它们与永久重定向302一起工作呢?

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

如果你想让一个以上的变量从SEO url传递回你的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:的末尾附加/?即可

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