感谢您的帮助,我能够创建一个.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=create_list
重定向到:
www.domain.com/create_list
我在网上发现了一个信息,我应该将我目标文件的权限(在我的情况下是索引)更改为755,但它在我的情况下不起作用。 该剧本的另一个谜团是第一部分似乎有效,但我不确定为什么它总是在最后给出网址“/”,即使我没有在规则中定义它。
任何帮助表示感谢。
修改
我设法通过对脚本的商城更改解决了这个问题:
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]
工作正常。但是我仍然不了解一些事情。首先,如果我删除#from:
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
[L,QSA]仍然有效,但是永久物[R = 302,L]没有,我明白这两行是用于与php文件一起使用的文件,它们解决了路径问题。但是如何使它们一起工作w permament重定向302?
第二件事是我需要在静态链接的末尾添加.html,这不属于我的计划。是否可以在没有.html扩展名的情况下使其工作?
答案 0 :(得分:-1)
如果你想让一个以上的变量从SEO网址传递回你的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
,因为这会导致无穷无尽的循环:
/mod1/index.php?module=something
=>服务器将其重定向到/mod1/something
/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