php 如何使用.htaccess文件创建用户配置文件URL,如/@username

vd2z7a6w  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(115)

我的.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]
ebdffaop

ebdffaop1#

我猜您正在处理.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]

1.我将/@something的新规则移到了其他规则的上方,以确保它首先被处理。
1.我从新规则中删除了R=302标志,因为它不应该是必要的,因为您正在内部重写URL。
1.我在新规则中添加了L标志,以指示如果此规则匹配,则不应处理其他规则。

相关问题