所以我不是最好的,并且最近一直在研究.htaccess编辑以使我的URL看起来很有吸引力,但我想知道如何重写我的.htaccess代码以便它可以像我一样工作如果有必要,我会喜欢它吗?
我遇到的问题是我无法弄清楚如何为需要三个slu $1
,$2
和$3
的部分编写代码( id,category和image)。目前,当我的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
我确信有更好的方式来写这个;我知道这是非常不可思议的 - 但它正在与所有但 &image=
slug一起工作。我遇到的一些其他问题是文件夹和文件被重写,我已经使用这段代码来修复:
# 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]
答案 0 :(得分:0)
如果你让第二组和第三组可选,你似乎只需要一条规则:
RewriteRule ^([\w\d]+)(?:/(\d+)(?:/(\d+))?)?$ index.php?id=$1&category=$2&image=$3 [L,QSA]
请注意:
\w
(单词字符)和\d
(数字)来限制重写的内容。这似乎就是您所需要的,它也可以避免重写现有文件(您也可以添加条件); (?:...)
来解决变量数量问题。