繁体   English   中英

我将如何根据需要来运行此mod_rewrite?

[英]How would I do this mod_rewrite to work as I need?

意识到还有其他有关此问题,但我找不到适合我需要做的事情的问题。 抱歉,如果我忽略了一个潜在的解决方案。

这就是我希望使用/请求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,然后从那里解析它。 我需要验证last /之后的最后一个值是数字(很容易),然后,如果是这种情况,则它下面的值将是文件名。 我想我可以通过添加具有.cbz / .cbz扩展名的file_exists()并查看哪个有效来验证它。 但是我想如果目录/文件请求通过但没有页面通过(那么就没有尾随的数字页面值)了,那我将不足之处。 我怎么知道这是文件还是目录请求?

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

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

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]

您可以在htaccess文件上尝试以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM