这是我的htaccess代码:
RewriteEngine On
RewriteRule ^/typo3$ - [L] RewriteRule ^/typo3/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php
RewriteRule ^/([a-zA-Z0-9_-]+)$ http://www.example.com/index.php?id=82&user=$1 [L,R=301]
显然我想要这个网址: www.example.com/username 被翻译为http://www.example.com/index.php?id=82&user=username
但这不起作用..(此代码导致htaccess根本无法正常工作并且找不到Page页面错误。
如果我更改了] + $ for a] +?代码确实有效,但不是我想要的:
RewriteEngine On
RewriteRule ^/typo3$ - [L] RewriteRule ^/typo3/.*$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php
RewriteRule ^/([a-zA-Z0-9_-]+)? http://www.example.com/index.php?id=82&user=$1 [L,R=301]
导致URL被重写/重定向到http://www.example.com/index.php?id=82&user=index的结果......正是如此,所以使用user = index。
现在,如果我删除了RewriteRule。* /index.php行,那么htaccess就再也无法工作了,导致找不到页面错误......
我花了好几天时间搞清楚这一点,但我绝对无能为力......
所以,我只想让www.example.com/username重定向到http://www.example.com/index.php?id=82&user=username
答案 0 :(得分:1)
这里有几个问题。
/typo3
或^/([a-zA-Z0-9_-]+)?
([a-zA-Z0-9_-]+)?
也匹配空请求,因为尾随?
。我想,这不是你想要的。[R]
或添加[L]
标记,否则将按顺序处理规则。这就是为什么首先将请求重写为index.php
然后在下一个规则中index
被识别为用户并再次重写为.../index.php?id=82&user=index
.*
和([a-zA-Z0-9_-]+)
之间出现下一个问题。 .*
识别所有请求,包括每个用户。因此,无法区分用户和任何其他请求。要重写用户名,您可以尝试
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-]+) http://www.example.com/index.php?id=82&user=$1 [L]
这意味着,如果请求与现有文件!-f
或目录!-d
不对应,则将其设置为用户名并重写为index.php?...
。< / p>
如果您不想重定向,请忽略主机名
RewriteRule ^([a-zA-Z0-9_-]+) /index.php?id=82&user=$1 [L]