如何使用 .htaccess 文件创建用户配置文件网址,例如 /@username

问题描述 投票:0回答:1

我的 .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]
php apache .htaccess mod-rewrite
1个回答
0
投票

我猜您正在处理

.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
    的新规则移至其他规则之上,以确保它是 先处理。
  2. 我从新规则中删除了
    R=302
    标志,因为它应该没有必要,因为 您正在内部重写 URL。
  3. 我在新规则中添加了
    L
    标志,以表明不应再添加其他规则 如果此规则匹配,则处理。

我希望这会起作用......

#Apache 时代#htaccess

© www.soinside.com 2019 - 2024. All rights reserved.