请考虑我的.htaccess
中的内容:
##
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteBase /
## Allow a few SEO Files direct access.
RewriteRule ^robots.txt?$ robots.txt [L]
RewriteRule ^ads.txt?$ ads.txt [L]
RewriteRule ^sellers.json?$ sellers.json [L]
## Avoid rewriting rules for the admin section
RewriteRule ^(admin|resources)($|/) - [L]
## Set Ajax Request File
RewriteRule ^(kahuk-ajax)/?$ kahuk-ajax.php? [L,QSA]
## Set controller with id
RewriteRule ^([^/]+)/([0-9]+)/?$ index.php?con=$1&id=$2 [L,QSA]
## Set controller with slug
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?con=$1&slug=$2 [L,QSA]
## For paging
RewriteRule ^([^/]+)/page/([0-9]+)/?$ index.php?con=$1&page=$2 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/page/([0-9]+)/?$ index.php?con=$1&slug=$2&page=$3 [L,QSA]
## Set controller for only one parameter
RewriteRule ^page/([^/]+)/?$ index.php?con=page&slug=$1 [L,QSA]
RewriteRule ^([^/]+)/?$ index.php?con=$1 [L,QSA]
## Set home page
RewriteRule ^/?$ index.php?con=home [L]
每当我尝试浏览http://example.com/kahuk-ajax/?prefix=manage-story-vote
时,这会打开index.php
而不是kahuk-ajax.php
!
我哪里做错了?
1条答案
按热度按时间mnemlml81#
第一个规则首先将请求重写为
kakuk-ajax.php
,但倒数第二个规则随后在重写引擎的 * 第二遍 * 期间将其重写为index.php
。您需要防止第二个规则重写
kakuk-ajax.php
的请求。如果这些URL在第一个路径段(通常用于分隔文件扩展名)中不包含点,则只需在求反的字符类中包含一个点即可。例如:或者,排除特定的文件扩展名:
或者,任何看起来具有文件扩展名的URL:
这个规则有点矛盾。您删除了带有尾随
?
的查询字符串,但随后又在其上追加了QSA
标志。如果您希望保留查询字符串,则两者都不需要。而且由于您正在捕获URL路径,因此也可以在 substitution 字符串中使用它。例如:另外,要注意允许一个可选的尾随斜杠在这里。这促进了重复的内容,可能会导致潜在的SEO问题。考虑重定向一个到另一个代替。
正则表达式末尾的
?
使得前面的字符(上面例子中的t
和n
)是可选的,这在这里实际上没有意义。另外,你不需要重写到同一个文件--你不希望在这里发生任何重写/替换。因此,上面的内容与以下内容相同:-
(连字符)明确表示“无替换”。然而,在上面的(negated character class)指令中包含了一个“点”,这个指令是多余的,除了“过早失败”。