所以我不是最好的在这方面,只是最近一直在寻找。htaccess编辑,使我的URL看起来有吸引力,但我想知道我将如何去重写我的。htaccess代码,使它的工作,因为我喜欢它,如果有必要吗?
我遇到的问题是我无法弄清楚如何为我需要三个slugs $1
, $2
和$3
(id,类别和图像)的部分编写代码。目前,当我的PHP检查&image=
是否为空时,我的代码不能正常工作;但它确实适用于?id=1&category=1
。
我的网站包含这样的布局:
?id=work --> ?id=work&category=1 --> ?id=work&category=1&image=1
?id=shop --> ?id=shop&category=1 --> ?id=shop&category=1&image=1
?id=play --> ?id=play&category=1 --> ?id=play&category=1&image=1
?id=about
?id=archive --> ?id=archive&image=1
我想这样来表示:
/work --> /work/1 --> /work/1/1
/shop --> /shop/1 --> /shop/1/1
/play --> /play/1 --> /play/1/1
/about
/archive --> /archive/1
这是我的。htaccess:
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/(.*)$ index.php?id=$1&category=$2 [L,QSA]
RewriteRule ^work/(.*)/(.*)$ index.php?id=work&category=$2&image=$3 [L,QSA]
RewriteRule ^about$ index.php?id=about [L,QSA]
RewriteRule ^archive$ index.php?id=archive [L,QSA]
RewriteRule ^404$ index.php?id=404 [L,QSA]
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
ErrorDocument 404 http://example.com/404
我相信有更好的方式来写这个;我知道这是超级不稳定的-但它正在与所有 but &image=
弹头一起工作。我遇到的其他一些问题是文件夹和文件被重写,其中我使用以下代码来修复:
# Allow any files or directories that exist to be displayed directly
RewriteCond ${REQUEST_URI} ^.+$
RewriteCond %{REQUEST_FILENAME} .(gif|jpe?g|png|js|css|swf|php|ico|txt|pdf|xml)$ [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
哦,我也没有包括?id=archive&image=
部分-我只是没能弄清楚。
最后一点,但我已经使用了这段代码,并使其在某种程度上工作-但遇到了循环问题:
RewriteRule ^(.*)/(.*)/(.*)$ index.php?id=$1&category=$2&image=$3 [L,QSA]
如果你让第二组和第三组是可选的,似乎你只需要一个规则:
RewriteRule ^([wd]+)(?:/(d+)(?:/(d+))?)?$ index.php?id=$1&category=$2&image=$3 [L,QSA]
请注意:
- 我使用
w
(字字符)和d
(数字)来限制重写的内容。这似乎是所有你需要的,它也将避免重写现有的文件(你也可以添加条件); - 我使用了两个非捕获组
(?:...)
来避免混淆变量的数量。