我的 .htaccess 文件中有这个现有代码,用于从 url 末尾删除 .php 并添加斜杠。 我还指定了自定义错误页面。 现在我尝试将规则添加到 /user.php?username=something 到 /@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]
我猜您正在处理
.htaccess file
中的各种重写规则。您面临的问题可能与您的规则顺序或冲突条件有关。
尝试使用以下 .htaccess
文件的修改版本,添加规则和重新组织条件
ErrorDocument 403 /errors/403.php
ErrorDocument 404 /errors/404.php
ErrorDocument 500 /errors/500.php
RewriteEngine On
### 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]
### NEW RULE: /@something TO /user.php?username=something ###
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^@([a-zA-Z0-9_.]+)/$ /user.php?username=$1 [QSA,L]
/@something
的新规则移至其他规则之上,以确保它是
先处理。R=302
标志,因为它应该没有必要,因为
您正在内部重写 URL。L
标志,以表明不应再添加其他规则
如果此规则匹配,则处理。我希望这会起作用......
#Apache 时代#htaccess