我的.htaccess文件中有这样一段代码,用于从url的末尾删除.php并添加一个斜杠。我还指定了自定义错误页。现在我正在尝试添加一个规则到/user.php?username=something to /@something但它会转到404
ErrorDocument 403 /errors/403.php
ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php
RewriteEngine on
### THIS IS NOT WORKING ###
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^@([a-zA-Z0-9_.]+)/$ /user.php?username=$1 [QSA,R=302]
### MAP /EXAMPLE/ TO /EXAMPLE.PHP ###
RewriteCond %{REQUEST_URI} /$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+?)/$ /$1.php [END]
### FORCE TRAILING SLASH WHEN ABSENT FOR NON-FILES ###
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) /$1/ [R=302,L]
### REDIRECT (DIR)/INDEX.PHP TO (DIR)/ ###
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule (.+/)?index\.php$ /$1 [R=302,L]
### REDIRECT /EXAMPLE.PHP TO /EXAMPLE/ ###
RewriteRule (.+)\.php$ /$1/ [R=302,L]
我尝试了下面的代码,但它只在其他规则不在.htaccess文件中时才起作用。
我需要让它和其他规则一起工作。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^@([a-zA-Z0-9_.]+)/$ /user.php?username=$1 [QSA,R=302]
1条答案
按热度按时间ebdffaop1#
我猜您正在处理
.htaccess file
中的混合重写规则。您面临的问题可能与规则的顺序或冲突条件有关。尝试使用添加了规则和重组条件的.htaccess
文件的以下修改版本1.我将
/@something
的新规则移到了其他规则的上方,以确保它首先被处理。1.我从新规则中删除了
R=302
标志,因为它不应该是必要的,因为您正在内部重写URL。1.我在新规则中添加了
L
标志,以指示如果此规则匹配,则不应处理其他规则。