我怎么能这个mod_rewrite工作,因为我需要?

时间:2013-05-29 14:20:23

标签: php .htaccess mod-rewrite

意识到还有其他问题,但我找不到一个专门针对我需要做的事情。如果我忽略了潜在的解决方案,请道歉。

这就是我希望使用/请求URL的方式:

http://mysite.com/read/comics/all-star-superman/all-star-superman-01/1

这就是我目前的工作方式:

http://mysite.com/read/index.php?dir=Comics/All%20Star%20Superman&file=All%20Star%20Superman%2001.cbr&page=1

dir变量可能很长。它并不总是2深。这实际上是让我的大脑陷入困境的部分。另外,我想将扩展名从文件中删除,因此我需要能够将其与普通目录区分开来。

我唯一的猜测是将整个URI请求发送到index.php,然后从那里解析它。我需要在最后一个/之后验证最后一个值(足够简单),然后如果是这种情况,则它下面的值将是文件名。我想我可以通过添加.cbz / .cbz扩展名file_exists()并查看哪些有效来验证它。但是,我想,如果对目录/文件的请求通过,但没有页面(因此没有一个尾随的数字页面值),我就会失败。我怎么知道它是文件还是目录请求?

将所有URI请求发送到脚本并在那里解析它还是尝试写入.htaccess文件中的所有条件是否更快?不过,我对mod_rewrite并不太熟悉。

2 个答案:

答案 0 :(得分:1)

看起来这种复杂的处理在mod_rewrite本身是可行的。通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# convert all the hyphens to spaces(%20) recursively
RewriteRule ^([^-]+)-(.*)$ /$1\%20$2 [L,NE]

# forward all read/... requests to /index.php
RewriteRule ^(read)/((?:[^/]+/)+?)([^/]+)/([^/]+)/?$ /$1/index.php?dir=$2&file=$3.cbz&page=$4 [L,NE,NC]

答案 1 :(得分:0)

你可以在htaccess文件上尝试这样的东西:

RewriteEngine On
RewriteRule  ^read/index.php?dir=(.+)/(.+)&file=(.+).cbr&page=(\d+)$  read/$1/$2/$3/$4 [NC,L]
相关问题